Erklärungen zur hier verwendeten Symbolik: schwarz blau lila grün _ a d.... v.... m... dalt dneu name n1 v1 Erklärungen Syntax des jeweiligen SAS-Statements/der jeweiligen SAS-Procedures. Optionen und deren Syntax für ein SAS-Statement. Platzhalter für zu spezifierende Namen, Parameter, Werte, sonstige Angaben. steht für ein Leerzeichen in der Syntax; (ACHTUNG: Leider gibt es im Zeichensatz kein Extra-Zeichen für "Leerzeichen"; da dies aber in der SAS-Syntax wichtig ist, wird es in der Beispielsyntax kenntlich gemacht; LEIDER wird von SAS das"_" auch für von SAS vorgegebene Variablennamen verwendet; doppelte "_" zeigen dies an oder innerhalb von Klammern beginnen die Variablennamen mit einem "_". einzelne Buchstaben sind Platzhalter für Zahlen, die dort in die Syntax eingesetzt werden müssen. steht immer für Dateinamen eines SAS-DATA-Sets; anghängte Zahlen unterscheiden verschiedene Dateien. steht immer für Variablen(namen) ; anghängte Zahlen unterscheiden verschiedene Variablennamen. steht immer für Matrizen(namen); wird in der Regel nur in der PROC IML verwendet; alter Dateiname neuer Dateiname steht allgemein für eine Bezeichnung; anghängte Zahlen unterscheiden verschiedene Bezeichnungen. Kurzform für name (mit Nummerierung). Kurzform für Variable (mit Nummerierung). Alle Befehle (Statements) sind in alphabetischer Reihenfolge aufgelistet; bei Procedures erfolgte die Einordnung mit dem Namensteil nach dem PROC... Allgemeines zur SAS-Syntax: Variablennamen dürfen nicht mehr wie 8 Zeichen enthalten. Sie dürfen keine Leerzeichen, keine Sonderzeichen, keine Umlaute, kein _ß“, kein Punkt, kein Komma, keinen Bindestrich enthalten. Alphanumerische Variablen werden durch ein an den Variablennamen angehängtes $ gekennzeichnet, dies aber nur beim erstmaligen Definieren der Variable, im weiteren Programmverlauf dann nicht mehr. Zählvariablen werden durch die Syntax gekennzeichnet: zv1 + a; in jeder Schleife wird a zu zv1 addiert und die Summe beim nächsten Schleifendurchlauf als neuer Wert für zv1 verwendet; nur diese Variablen werden garantiert nicht vor dem nächsten Schleifendurchlauf gelöscht. Missings bei numerischen Variablen werden durch einen ‘.‘ (Punkt) symbolisiert, oder als “Spezial-Missing“ kann ‘.N‘,‘.O‘, ‘.K‘, etc. verwendet werden; bei strings wird ein Leerzeichen ausgegeben. Listen von Variablen werden durch • Auflistung aller einzelnen Variablennamen, jeweils durch ein Leerzeichen getrennt (bei SQL durch ein Komma) • durch Nennung des ersten und letzten Variablennamens (durch doppeltes minus '—' getrennt) bei in der Tabelle aufeinanderfolgenden Variablen (Syntax: VAR_v1— v2; • bei Variablennamen mit angehängtem Zählindex durch Nennung des ersten und letzten Variablennamens (Syntax: VAR_v1-v12); SAS-Statements: %..... ruft ein Unterprogramm auf, das mit %MACRO definiert wurde: siehe MACRO %LET siehe LET %MACRO siehe MACRO %MEND siehe MACRO %SCAN siehe SCAN ALL (SQL-Befehl) 1.) ermöglicht in einer WHERE-Abfrage den (zeilenweisen) Vergleich einer Variablen mit mehreren Werten aus einer (einspaltigen) Tabelle oder einer best. Spalte aus einer (mehrspaltigen) Tabelle; WHERE_v1>ALL_(Argument) die Bedingung für v1 muß auf jeden Wert der in Argument benannten Spalte zutreffen, damit die Aussage wahr wird; Argument kann auch durch eine SELECT-Routine ersetzt werden. PROC SQL; dies Beispiel listet v1, wenn der Wert von v1 SELECT_v1 nicht in der Spalte von v2 auftaucht. FROM_dname1 WHERE_NOT_v1_=_ALL_(SELECT_v2 FROM_dname2) ; QUIT; ALTER (SQL-Befehl) siehe TABLE. ANOVA (Procedure) führt eine ein- und mehrfaktorielle Varianzanalyse zwischen einer kontinuierlichen abhängigen und einer nicht kontinuierlichen unabhängigen Variable(n) durch; nur für balancierte Daten; die Analyse ist eine Verallgemeinerung des t-Tests auf mehr als zwei Stichproben;die Werte der unabhängigen Variable(n) werden wie nominal skalierte Daten behandelt (-> Klassifizierung); die Realisierungen von vabhängig müssen alle in einer Spalte stehen. H0: die Mittelwerte aller Klassen sind gleich. S.53-55; S.68, 69; A11, 12; A15. PROC_ANOVA_data=dname; MEANS ist optional und bildet die CLASS_ vunabh1_ vunabh2 ; Mittelwerte über die Klassen; MODEL_vabhängig_=_vunabh1_ vunabh2; tukey testet, welche Klassen RUN; signifikant vonein ander abweichen. (siehe MEANS) Es können paarweise t-Tests durchgeführt werden. PROC_ANOVA_data=dname; die Fehlerwahrscheinlichkeit α=0.05 wird CLASS_ vunabhängig; hier aber nur für den einzelnen, MODEL_vabhängig_=_vunabhängig; paarweisen Test eingehalten; für eine MEANS_ vunabhängig_/_t; Gesamtbetrachtung des Experiments ist RUN; eine Adjustierung notwendig (s.u.). Paarweise t-Tests mit Adjustierung nach Sidak. PROC_ANOVA_data=dname; hier wird α=0.05 für das gesamte CLASS_ vunabhängig; Experiment eingehalten. MODEL_vabhängig_=_vunabhängig; MEANS_ vunabhängig_/_sidak; RUN; Bestimmung einer Grenzdifferenz nach Tukey beim Vergleich der Mittelwerte (ist besser als sidak: s.o.). PROC_ANOVA_data=dname; hier wird α=0.05 für das gesamte CLASS_ vunabhängig; Experiment eingehalten; liegt 0 im KI der MODEL_vabhängig_=_vunabhängig; Grenzdifferenz, so sind die Mittelwerte MEANS_ vunabhängig_/_tukey; nicht signifikant verchieden. RUN; ANY (SQL-Befehl) 1.) ermöglicht in einer WHERE-Abfrage den Vergleich mit mehreren Werten aus einer (einspaltigen) Tabelle oder einer best. Spalte aus einer (mehrspaltigen) Tabelle; WHERE_v1>ANY_tabname die Bedingung für v1 muß auf nur einen Wert der in Argument benannten Spalte zutreffen, damit die Aussage wahr wird; Argument kann auch durch eine SELECT-Routine ersetzt werden. APPEND_FROM siehe IML (Procedure) ARIMA (Procedure) differenziert Zeitreihen; es werden Differenzen zu vorhergehenden Zeitpunkten gebildet, um durch diese Datentransformation Varianz- bzw. Mittelwerts-Stationarität zu erreichen; es wird die Transformation gesucht, die die kleinste Varianz der transformierten Werte aufweist; durch Wahl der Zeitabstände (Intervalle) können Trend (Intervall = 1) und/oder Saisoneffekte (Intervall = Saisonlänge) heraustransformiert werden. PROC_ARIMA_data=dname; IDENTIFY_var=v1; v1 enthält die Werte zur Zeitreihe; hier keine Differenzenbildung. IDENTIFY_var=v1(a,b,c); differenziert erst nach Intervall a, dann nach Intervall b, dann nach Intervall c (Anzahl der Intervalle beliebig). ESTIMATE_p=(a) schätzt Modellparameter; p gibt an, daß ein ARProzeß a-ter Ordnung bestimmt werden soll; bei p=0 weglassen. _q=(b) q gibt an, daß ein MA-Prozeß b-ter Ordnung bestimmt werden soll; bei q=0 weglassen. _plot; Grafik der ACF und PACF der Residuen, um zu prüfen, ob die Residuen white noise entsprechen. FORECAST_lead=c prognostiziert Werte für die folgenden c Zeitpunkte _id=v3; RUN; PROC_ARIMA_data=d1; IDENTIFY_var=v1 _crosscorr=v2; spezifiziert die zweite Zeitreihe für eine Kreuzkorrelation (v2 = Einflußvariable) bzw. Regression mit autokorrelierten Störungen. ESTIMATE_p=(a) _q=(b) _input=v2 _plot; RUN; PROC_ARIMA_data=d1; IDENTIFY_var=v1(a,b); ESTIMATE_p=(a) (b) _q=(a); RUN; definiert v2 als Einflußzeitreihe (-variable). Hier wird ein SARIMA (1,1,1)x(1,1,0)b -Modell spezifiziert; es wird nach a und b differenziert; es gibt zwei Faktoren für den AR-Prozeß, einen für den MA-Prozeß. ARRAY legt ein Variablen-Array (indizierte Variable mit Grenzen für die Indizees) fest; die Einzelvariablen können dann mit der direkten Bezeichnung (z.B. v1, v2, v3 , usw.) oder über Laufvariable i als Indizee mit v[i] z.B. in einer DO-Schleife angesprochen werden (siehe auch Beispiel 10). ARRAY_vneu{c}_d_va-vb; die Indizees der Variable v laufen von a bis b; das Array vneu besteht aus c=(b-a+1) Einzelzellen (variablen); d gibt die Größe der einzelnen Zellen in Byte an (optional; Default=8). ARRAY_vneu{c}_$_va-vb; definiert ein Array für String-Variablen. ARRAY_varr_v1_v2_v3_v4; ARRAY_vneu{*}__numeric_; * läßt die Anzahl der Array-Variablen offen; diese wird angepaßt; hier werden durch die Systemvariable _numeric_ alle numerischen Variablen des Datasets mit einbezogen; mit der Funktion dim(vneu) kann dann die Anzahl der Variablen zurückgegeben werden. ARRAY_vneu{*}__character_; wie oben, aber hier alle Character-Variablen. AS (SQL-Befehl) 1.) ermöglicht die Einführung von neuen Variablen oder Umbenennungen von bereits vorhandenen Variablen oder Dateien(namen); diese neuen Namen können in den übrigen Befehlen (außer bei WHERE !!!) der gleichen PROC SQL verwendet werden. 2.) im Befehl CREATE TABLE: siehe dort. SELECT_v1_AS_v1neu FROM_lib.d1_AS_d1neu so können alias-Namen für Pfade und libname.dname vergeben werden AXISa legt das Achsenlayout Nr.a fest; die Zuordnung zur betreffenden Grafikachse erfolgt mit dem Befehl PLOT. AXISa_label=(color=farbe Achsenbezeichnung - Farbe height=n Schriftgröße font=swiss Schriftart (hier SWISS) justify=left Achsenbezeichnung- Textorientierung angle=90 Achsenbezeichnung-Drehung des Textes ‘name’) Achsenbezeichnung -Text _minor=none bestimmt das Format der „minor tickmarks“; mit none werden keine minor dargestellt. _order=b_TO_c_BY_d bestimmt das Format der „major tickmarks“; b=kleinster, c=größter Wert, d=Intervall. _value=(angle=90) ; dreht den Text der tickmark-Beschriftung um 90 Grad. BETWEEN (für SQL) legt Grenzen für ein WHERE-Statement fest. WHERE_v1_BETWEEN_a_AND_b wird wahr wenn der Wert von v1 zwischen a und b liegt. BLOCK erzeugt 3-D-Säulen-Grafiken; um mehrere Säulenreihen hintereinander darzustellen, müssen die Werte alle in einer Spalte stehen und die Reiehn werden dann mit einer Klassifizierungsvariable differenziert. BLOCK_vname; BLOCK_vn1_/_group=vname2 gruppiert Säulenreihen; /_midpoints=a_to_b_by_c; legt die Klassenmitten k fest: a ist kleinster, b größter Wert für k mit Schrittweite c zwischen den Klassenmitten. BY gibt die Variable(n) an, nach der (denen) sortiert oder klassifiziert (in Tabellen oder in Grafiken) werden soll; bevor BY in einer PROC verwendet werden kann, muß die jeweilige Datendatei mit PROC_SORT nach der betreffenden Variable(n) sortiert werden. BY_vname1_vname2; CALL LABEL übergibt das Label einer Variable als Text-Eintrag in eine neue Variable; vneu muß vor dem CALL-Statement als Stringvariable (z.B. LENGTH_vneu_$8.;) definiert werden (siehe auch Beispiel 10). LENGTH_vneu_$8.; CALL_LABEL(valt,_vneu); CALL SYMPUT definieren von Globalvariablen (Makrovariablen) innerhalb eines DATASteps mit Werten, die in diesem DATA-Step berechnet wurden; hier können auch G.-variablen kreiert werden, deren Inhalt später als Variable(nnamen) verwendet werden kann (siehe Beispiel 3). ACHTUNG: wenn die mit CALL SYMPUT benannte Variable vor einem lokalen Aufruf/Erzeugung nicht definiert wurde, wird sie nur in die lokale Variablenliste aufgenommen, ist also nicht global verfügbar; Abhilfe: den Variablennamen mit %GLOBAL definieren oder außerhalb des Makros mit %LET benennen. CALL_SYMPUT_('v1',_PUT(v2,_best.); der Wert der numerischen Variable v2 wird als String an die Globalvariable v1 übergeben; v1 hat dann einen alphanumerischen Charakter und muß daher in Hochkommas stehen. CALL_SYMPUT_('v1',_v3); der string von Variable v3 wird in die Globalvariable v1 übertragen. CALL_SYMPUT_('v1',_TRIM(LEFT(v2,_a.b))); Um den Zahlenwert der Globalvariable als Zahl in anderen Statements zu nutzen (z.B. als Spaltennummer im FILENAME-Statement beim Einlesen aus einer Excel-Tabelle) müssen die Ziffern linksbündig in der Variable positioniert werden; die Formatangabe a.b muß/kann wohl weg! CALL VNAME übergibt den Namen einer Variable als Text-Eintrag in eine neue Variable; vneu muß vor dem CALL-Statement als Stringvariable (z.B. LENGTH_vneu_$8.;) definiert werden (siehe auch Beispiel 10). LENGTH_vneu_$8.; CALL_VNAME(valt,_vneu); CANCORR (Procedure) führt kanonische Korrelationsanalyse für zwei Variablengruppen durch ; es werden Linearkombinationen (= kanonische Variablen; W..) der "WITH"-Variablen (Gruppe 2; s.u.) gesucht, die die "VAR"-Variablen (Gruppe 1) möglichst gut erklären; dabei wird die Korrelationsstruktur der "WITH"-Variablen untereinander mitberücksichtigt. PROC_CANCORR_data=dname _corr; gibt die Korrelationen zwischen den Originalvariablen aus. VAR_v1_v2; Liste der Variablen in Gruppe 1; WITH v3 v4; Liste der Variablen in Gruppe 2; RUN; CAPABILITY (Procedure) führt Basis-Statistiken durch (kann mehr als PROC UNIVARIATE). CARDS hiermit können die Werte für die mit INPUT definierten Variablen direkt aus dem Programmtext eingelesen werden (siehe auch INPUT). Die nachfolgenden Werte werden nicht mit einem Semikolon abgeschlossen. Die einzelnen Werte werden durch Leerzeichen getrennt. CARDS erzeugt automatisch einen OUTPUT und danach einen Rücksprung zur vorhergehenden INPUT-Programmzeile, solange, bis alle cards abgearbeitet sind. CARDS; wert1 wert2 wert3 CASE... (SQL-Befehl) knüpft den zeilenweisen Eintrag von Werten an Bedingungen; hinter THEN und ELSE können die gleichen Einträge wie bei SELECT (außer *) verwendet werden; wichtig: die WHEN-Bedingungen (Anzahl beliebig) werden der Reihe nach abgearbeitet; ist eine der Bedingungen erfüllt, wird zugehöriges THEN ausgeführt und das Programm überspringt alle folgenden Schritte bis zum END. SELECT_CASE_WHEN_Bedingung1_THEN_v1 WHEN_Bedingung2_THEN_"Text" WHEN_Bedingung3_THEN_v2*v3 ELSE_sum(v4) END_AS_vneu FROM_dname CATMOD (Procedure) testet Loglineare Modelle für kategoriale Daten. PROC_CATMOD_data=dname; MODEL_vzeile*vspalte=_response_; '_response_' ist hier ein Schlüsselwort und muß so stehen bleiben! LOGLIN_vzeile|vspalte; hier werden die betrachteten Effekte angegeben (in diesem Fall saturiertes Modell mit Wechselwirkung) RUN; PROC_CATMOD_data=dname; MODEL_v1*v2*v3*v4=_response_; LOGLIN_v1|v2|v3|v4_@a; hier wird die Anzahl der betrachteten Wechselwirkungsterme insofern begrenzt, daß nur Terme mit maximal a Komponenten berücksichtigt werden. RUN; PROC_CATMOD_data=dname; MODEL_v1*v2=_response_ _/_pred=freq gibt die mit dem spezofizierten Modell berechneten (geschätzten) Zellhäufigkeiten und die beobachteten Zellhäufigkeiten aus (Ausgabereihenfolge entspricht dem Response Profile). _noprofile keine Ausgabe der "Response Profiles". _noresponse keine Ausgabe der "Response Matrix". _noiter keine Ausgabe der Zwischenergebnisse. _noparm; keine Ausgabe der "Analysis of Maximum-Likelihood-Estimates". LOGLIN_v1_v2; nicht saturiertes Modell (ohne Wechselwirkungsterm). RUN; CLASS legt fest, welche Variable als Klassifizierungsvariable verwendet werden soll; enthält die Variable Zahlenwerte, so werden diese als nominal skaliert behandelt; es wird keine Klassierung durchgeführt. CLASS_v1_v2; (siehe PROC ANOVA und PROC GML) CLUSTER führt hierarchische Clusteranalysen durch; PROC_CLUSTER_METHOD=meth für meth kann single, complete, average, centroid, median, ward nd einiges mehr verwendet werden (siehe Register). _data=dname _outtree=dneu; gibt in die Datei dneu Informationen für ein Dendogramm aus, das mit PROC TREE gezeichnet werden kann. VAR_v1_v2_v3; benennt die Variablen, die in die Clusterung mit einbezogen werden; fehlt dieses Statement, werden alle in der datei enthaltenen metrischen Varaiblen verwendet. ID_vlabel; aus vlabel werden Bezeichnungen für die einzelnen Beobachtungen entnommen (z.B. für Dendogramm). COPY_v5_v6; die Variablen v5, v6 werden zusätzlich mitgeführt. RUN; COLUMN benennt die mit PROC REPORT auszugebenden Variablen und legt die Reihenfolge (= Ausgabehierarchie) der Spalten fest; COLUMN_v1_v2_v3; v1 bis v3 werden für die Output-Tabelle verwendet. COLUMN_v1_ ('text'_v2_v3) v2 und v3 werden mit einer gemeinsamen, zusätzlichen Spaltenüberschrift text ausgegeben. ('text#----'_v4_v5); wie oben; wenn # mit der split= Option (siehe REPORT) angegeben wurde, wird die Überschrift in einer zweiten Zeile unterstrichen. CONTENTS (Procedure) gibt Informationen zur Struktur eines Data-Sets (welche Variablen, Labels, Attribute, etc.) aus. PROC_CONTENTS_data=dname _position; gibt die Variablen in der Reihenfolge der Positionen aus. RUN; CONTRAST hier können selbst aufgestellte Hypothesen vorgegeben werden, für die dann ein Test durchgeführt wird (in PROC GLM, Varianzanalyse); die Hypothese betrifft die Parameterschätzer für die Faktorstufen eines im MODELStatement angegebenen Einflußfaktors; H0: ‘die Summe der Parameterschätzer der verschiedenen Faktorstufen ist gleich 0‘ wobei für die Parameterschätzer konstante Vorfaktoren spezifiziert werden. (als Vorfaktoren können auch 0 und negative Zahlen eingesetzt werden). (siehe auch ESTIMATE) CONTRAST_‘label‘_var_a_b_c; label ist ein Name für den Kontrast (für den Output); var ist die betrachtete Einflußgröße: diese hat hier mindestens 3 Faktorstufen, für die die Vorfaktoren a, b, c angegeben sind (für weitere Faktorstufen würde automatisch 0 gesetzt); CONTRAST_‘label‘_var_1; testet, ob Parametersch. der 1. Faktorstufe = 0. CONTRAST_‘label‘_var_1_-1; testet, ob Parametersch. der 1. und 2. Faktorstufe gleich sind. CONTRAST_‘label‘_var_1_-2; testet, ob Parametersch. der 1. Faktorstufe doppelt so groß ist wie der von der 2.. CORR (Procedure) berechnet Korrelationen: Pearson-Maßkorrelation, SpearmanRangkorrelation, ... ; im Output erscheinen Korrelation, Signifikanz und Anzahl eingegangener Beobachtungen. PROC_CORR_data=dname _pearson „normale“ Pearson’sche Maß-Korrelation. _spearman Rang-Korrelation nach Spearman. _outp=dneu; schreibt in dneu Korrelationsmatrix nach Pearson VAR_v1 v2 v3; erzeugt komplette Korrelationsmatrix für v1 – v3. WITH v3 v4 v5; erzeugt Korrelationen nur zwischen diesen und den unter VAR.. angegebenen Variablen. RUN; CORR (SQL-Befehl) siehe UNION. count (SQL-Befehl) Kenngröße wird wie eine Variable verwendet; bestimmt die Anzahl von Einträgen in einer Spalte; SELECT_count(sp1)_AS_v1 hier wird nur ein Zahlenwert ausgegeben. FROM_tab1; SELECT_count(sp1)_AS_v1 mit GROUP BY kann eine Gruppierungsvariable anFROM_tab1 gegeben werden; es wird dann für jede Gruppe geGROUP_BY_sp2; trennt gezählt. CREATE (SQL-Befehl) wird in verschiedenen Befehlsfolgen verwendet: CREATE INDEX siehe INDEX CREATE TABLE siehe TABLE CREATE VIEW siehe VIEW CREATE_..._FROM DATA siehe IML (Procedure) erzeugt einen (oder mehrere) Data-Set, der unter dname abgespeichert wird; innerhalb des DATA-Steps können Globalvariablen oder Macros verwendet werden (siehe unten); Reihenfolge der Variablen ändern: siehe Beispielprogramme 2a bis 2b. DATA_dname; speichert im saswork-Verzeichnis SET_dalt; RUN; DATA_ libname.dname; speichert im mit LIBNAME definierten Verzeichnis SET_dalt; RUN; DATA_dname1_dname2; erzeugt zwei identische Dateien. SET_dalt; IF_(Bedingung); die jeweilige Datenzeile von dalt wird nur dann in dname übernommen, wenn die Bedingung erfüllt ist. vneu=(Bedingung); wenn die Bedingung wahr wird, ist vneu=1, sonst vneu2=(valt>30); vneu=0; wenn (valt>30)=wahr, dann vneu2=1. vneu3=“&valt“; der Inhalt der Globalvariable valt wird an vneu3 übergeben (!! doppelte Hochkommas !!) &vgl=wert; so wird der Inhalt der Globalvariable vgl als Variablenname verwendet und an diese Variable ‘wert‘ übergeben. RUN; DATA_dname; INPUT_v1; LABEL_v1="Text"; CARDS; wert1 wert2 wert3 RUN; DATA_d1_d2; über IF-Anweisugen kann der OUTPUT in die SET_dalt; entsprechende Datei gesteuert werden. IF_(Bedingung1)_THEN_OUTPUT_d1; IF_(Bedingung2)_THEN_OUTPUT_d2; RUN; DATA_d1_d2; MERGE_d3_d4_(in=hind4); IF_(hind4)_THEN_OUTPUT_d1; ELSE_OUTPUT_d2; RUN; DATA_dneu1_(KEEP=_va-vb) teilt dalt in zwei Dateien auf. _dneu2_(DROP=_va-vb); SET_dalt; RUN; DATA_d1_(type=corr); spezifiziert den Typ der einzulesenden Daten; die Datei d1 ist dann entsprechend gekennzeichnet; =corr: Korrelationsmatrix, =distance: Distanzmatrix. INFILE_'Pfad'; RUN; DATA_dname; SET_&text; hier wurde Dateiname (inklusive Libname) mit %LET (ohne Hochkommas !!) in die Globalvariable text eingelesen. RUN; DATA_dname; SET_libname.%text; hier wird nur der Dateiname mit Hilfe eines Macros mit der Macro-Funktion %SCAN eingelesen (siehe Beispiel bei SCAN). RUN; DATA_dname; SET_dalt; in dalt ist Stringvariable v2 enthalten. v1=put(v2, $chara.)||‘text‘; der Inhalt von v1 setzt sich jeweils aus dem Inhalt von v2 als string der Länge a. zusammen, an den text angehängt wird. oder v1=put(v2, a.)||put(“&text“, b.); hier wird der Inhalt der Globalvariable text als Zeiochenkette der länge b. angehängt. RUN; DBLOAD siehe Beispiel 6 DEFINE definiert den Ausgabestil einzelner Spalten in PROC REPORT; DEFINE_v1_/_order sortiert die Werte in v1 jeweils zu den zugehörigen, der davor stehenden, hierarchisch übergeordneten Spalte; Achtung: wenn Formate vergeben wurden, haben diese Vorrang für die Sortierreihenfolge, daher z.B. bei Datum aufpassen !!) _left bestimmt die Orientierung des Eintrags in der Spalte (andere: center, right). _width=a Breite der Spalte, angegeben in Anzahl Zeichen. _display stellt bei numerischen Variablen nur vorhandene Nachkommastellen dar. _flow; bewirkt Zeilenumbruch bei Text, der länger als die Spalte breit ist; (Achtung: wenn im Text ein '/' auftaucht, wird dies als <return> = neue Zeile interpretiert, da per Voreinstellung '/' als Trennzeichen gilt (Æ mit split – Option in PROC REPORT ändern); das Zeichen wird nicht ausgegeben). DEFINE_v1_/_order_order=internal; gibt zum einen eine übersichtliche Ausgabe (Werte werden nur bei Änderung in Folge ausgegeben), richtet sich aber zum anderen nach der in der Dati vorgegebenen Reihenfolge. DELETE hiermit können einzelne Datensätze/Datenzeilen aus einem Data-Set entfernt/gelöscht werden; z.B. IF_NOT_(vname=a)_THEN_DELETE; DELETE (SQL-Befehl) löscht einzelne Datensätze in Abhängigkeit von best. Bedingungen aus einer bestehenden Tabelle. DELETE_FROM_tab1_ WHERE_Bedingung; DESCRIBE (SQL-Befehl) fragt die Definition eines VIEW ab und zeigt die Syntax im log Fenster an. DESCRIBE_VIEW_viewname; DISCRIM (Procedure) führt Diskriminanzanalyse durch; PROC_DISCRIM_data=dname dname wird zur Erstellung der Klassifikationsregeln analysiert. _testdata=dtest dtest wird nach diesen Regeln klassifiziert. _method=..... bestimmt die Herleitungsmethode für die Klassifikationsregeln; =normal: parametrischees Verfahren, basiert auf einer multivariat-normalen Verteilungsannahme; =npar: nicht parametrisches Verfahren. _pool=..... spezifiziert die Voraussetzungen für die Kovarianzstruktur (KS) der verschiedenen Klassen; =yes :die KS aler Klassen sind gleich; =no : die KS sind ungleich; =test : führt einen Test (H0 'KS sind gleich') durch und wählt die Methode aus (Default: alpha=10%). _slpool=a; a gibt alpha-Schranke für KovarianzHomogenitätstest an. _crossvalidate führt eine Kreuzvalidierung durch (siehe Sachregister). _crosslist listet die Ergebnisse der Kreuzvalidierung. CLASS_v1; v1 in dname gibt die Gruppierung vor, für die die Klassifikationsregeln gefunden werden sollen. RUN; DM weiß nicht genau, globales Statement für z.B. DM_'CLEAR_log'; löscht den Inhalt des Log-Fensters. DO bewirkt die Wiederholung eines Programmteils (muß immer mit einem END abgeschlossen werden) DO_i=a_TO_b_BY_c; führt die Schleife ((b-a)/c+1)-mal aus END; DO_i=a, _b, _c; END; DO_i=a _TO_b; v[i]=x; END; führt die Schleife jeweils für a, b und c aus vergibt an die indizierte Variable v für die Indizees a bis b den Wert x. DROP löscht Variablen (Spalten aus dem Data-Set) DROP_v1_v2; löscht die Variablen v1 und v2 END siehe DO ESTIMATE hier können selbst aufgestellte Hypothesen vorgegeben werden, für die dann ein Test durchgeführt wird (in PROC GLM, Varianzanalyse); die Hypothese betrifft die Parameterschätzer für die Faktorstufen eines im MODELStatement angegebenen Einflußfaktors; H0: ‘die Summe der Parameterschätzer der verschiedenen Faktorstufen ist gleich 0‘ wobei für die Parameterschätzer konstante Vorfaktoren spezifiziert werden. (als Vorfaktoren können auch 0 und negative Zahlen eingesetzt werden). (siehe auch CONTRAST) ESTIMATE_‘label‘_var_a_b_c; label ist ein Name für die Hypothese (für den Output); var ist die betrachtete Einflußgröße: diese hat hier mindestens 3 Faktorstufen, für die die Vorfaktoren a, b, c angegeben sind (für weitere Faktorstufen würde automatisch 0 gesetzt); ESTIMATE _‘label‘_var_1; testet, ob Parametersch. der 1. Faktorstufe = 0. ESTIMATE _‘label‘_var_1_-1; testet, ob Parametersch. der 1. und 2. Faktorstufe gleich sind. ESTIMATE _‘label‘_var_1_-2; testet, ob Parametersch. der 1. Faktorstufe doppelt so groß ist wie der von der 2.. EXACT ruft exakte Teststatistiken auf; wird in PROC FREQ verwendet. EXACT_mhchi exakter Mantel-Haenszel-Chi²-Testwert. _trend exakter Cochran-Armitage-Testwert. _mcnem exakter Mc-Nemar-Testwert. _rror; exakte relative-risk- und odds-ratio-Werte EXCEPT (SQL-Befehl) wird wie UNION eingesetzt, liefert aber das entgegengesetzte Ergebnis: es werden nur Datenzeilen ausgegeben, für die in der andern Datei keine Übereinstimmungen gefunden wurden; Achtung: bei beiden SELECT-Befehlen muß die gleiche Anzahl Variablen selektiert werden! SELECT_a,b_FROM_t1 liefert die Zeilen von t1 (keine doppelten !), die in a EXCEPT oder b keine Übereinstimmung mit Werten von SELECT_a,b_FROM_t2; entsprechend a oder b in t2 haben. .....EXCEPT_ALL..... gibt auch doppelte mit aus. EXISTS (SQL-Befehl) führt zu einer Ausgabe, wenn die Bedingung wahr (bzw. bei NOT EXISTS nicht wahr) ist; im ersten Beispielen also dann, wenn die geschachtelte SELECT-Abfrage irgendeine Zeile ausgibt; wird meist in WHERE-Abfragen verwendet; SELECT_*_FROM_tab gibt die betreffende Zeile von tab aus, WHERE_EXISTS_(SELECT...); wenn die geschachtelte SELECTRoutine kein leeres Ergebnis hat. SELECT_*_FROM_tab gibt die betreffende Zeile von tab aus, WHERE_NOT_EXISTS_(SELECT...); wenn die geschachtelte SELECTRoutine ein leeres Ergebnis, also keinen Eintrag hat (missing value ist ein Eintrag!!!). FILENAME legt einen alias-Namen für einen (Pfad+Dateinamen) fest um externe Dateien mit SAS-fremden Speicherformat zu einzulesen (z.B. auch mit INFILE) oder zu erzeugen; wird ähnlich wie LIBNAME verwendet; für EXCELImport/Export siehe Beispiel 5. FILENAME_alias_’pfad\dname.ext’; alias ist der im weiteren Programm verwendbare Name; in diesem Fall muß die Extension „ext“ beim Dateinamen angegeben werden; mit der Option device wird unter GOPTIONS dann das Speicherformat festgelegt. FILENAME_export_DDE_“excel_|_tabelle1!zasb:zcsd“ spezifiziert den Datenexport von SAS nach EXCEL (siehe Beispiel 5a); tabelle1 entspricht dem Tabellennamen in EXCEL; a, b, c, d sind Zeilen- (z) und Spalten- (s) –nummern, die den einzulesenden Datenblock in EXCEL begrenzen. _notab; diese Option verhindert z.B., daß strings beim Einlesen nach dem ersten Leerzeichen abgeschnitten werden (die Trennungen zwischen den Variablen müssen dann aber im PUT-Statement „manuell“ eingebaut werden: siehe Beispiel 5d) FOOTNOTE (globales Statement) fügt Fußnoten in die Ausgabe mit ein; FOOTNOTE_'Text'; FOOTNOTE_j=l_'Text'; Option j bewirkt eine Justierung des Textes: l = links-, r = rechtsbündig, c = mittig. FORECAST (Procedure) liefert Vorhersagen für Zeitreihenmodelle; PROC_FORECAST_data=dname _lead=a bestimmt die Anzahl (a) der Zeitpunkte , für die Werte geschätzt werden sollen (direkt im Anschluß an die bereits vorliegenden). _trend=a bewirkt keine (a=1), eine lineare (a=2) oder quadratische (a=3) Anpassung. _season=b die Saison hat eine Länge von b Zeitpunkten. _out=dneu _outall _method=expo einfaches exponentielles Glätten. =addwinters additives Holt-Winters-Verfahren; -> additive Saison. =winters; multiplikatives Holt-Winters-Verfahren; -> multiplikative Saison. VAR_var1; ID_var2; in var2 stehen die Beobachtungszeitpunkte. RUN; FORMAT (Procedure) definiert Variablenformate für die Ausgabe; im Beispiel wird festgelegt, daß, wenn für die Variable fname der wert1 erscheint, stattdessen der string1 ausgegeben wird, bzw. wenn fname den wert2 annimmt, der string2. (Achtung: formatisierte Daten können nur noch mit Hilfe der FormatDateien/Anweisungen angesehen werden; unter dem Libname 'library' muß der Pfad angegeben werden, unter dem die entsprechende Formatdatei *.sc2 steht; falls diese Datei verloren geht, können die Daten nach Voreinstellung von OPTIONS_nofmterr; auch so betrachtet werden.); Formatnamen dürfen nicht mit einer Ziffer enden!! (siehe Statement FORMAT) PROC_FORMAT; temporäres Format. VALUE_fname1_wert1='string1'_wert2='string2'; RUN; PROC_FORMAT_library=libname permanentes Format; erzeugt format.sc2 Datei unter libname. _cntlin=dname; die Formatanweisungen werden aus dname gelesen; es müssen die Variablen fmtname, type, start und label für Formatnamen, Typ (‚n‘ für numerisch, ‚c‘ für string; kleinster Wert (dem das label zugewiesen werden soll) und Label angegeben sein. RUN; PROC_FORMAT_library=libname _fmtlib; listet die Wertelabel mit zugehörigen Werten. SELECT_fname; von Format fname. RUN; PROC_FORMAT_ library=library _cntlout=dname; schreibt die Wertelabel und Werte in die Datei dname. SELECT_fname; von Format fname. RUN; FORMAT legt Format von Daten für Ausgabe im Out-Fenster und für Dateispeicherung fest; wird im DATA-Step benutzt; die Werte der Variablen werden FORMAT_vname_a.b; vname wird mit maximal a Stellen und mit maximal b Nachkommastellen dargestellt. FORMAT_var1_var2_fname.; weist var1, var2 das Format fname zu; fname wurde in PROC FORMAT definiert (wichtig: nach fname muß ein Punkt (".") stehen!!). FORMAT_var1_fnameb.; gibt die Formate von var1 mit maximal b Zeichen aus (b ist eine Zahl). FORMAT_var1_za.b; Zahlenformat; beachte den '.' zwischen a und b; a gibt an, wieviele Stellen insgesamt (inklusive Komma) ausgegeben werden (freie Stellen werden mit '0' aufgefüllt), b wieviele davon Nachkommastellen sind. FORMAT_vdatum_ddmmyya.; vdatum ist eine SAS-Datumangabe (Zahl bezogen auf 01.01.1960 = 0); a ist eine Zahl, die das Ausgabeformat bestimmt: a=6 ohne Trennzeichen, a=8 mit Trennung und Jahr 2stellig, a=10 mit Trennung und Jahr 4-stellig. FORMAT_vdatum_datea.; bei a=7 Datumausgabe als ddMMMyy, bei a=9 als ddMMMyyyy. FORMAT_vdatum_juliana.; bei a=5 Datumausgabe als yyddd, bei a=7 als yyyyddd, wobei ddd von 1 bis 365 (bis 366) reicht. FREQ (Procedure) berechnet absolute und relative Häufigkeiten (siehe auch TABLES). PROC_FREQ_data=dname; TABLES_vname1; WEIGHT vname2; in vname2 können Anzahlen für aggregierte Beobachtungen angegeben werden RUN; PROC_FREQ_data=dname; ohne Angabe von Variablen werden Häufigkeitsstatistiken für alle in dname auftauchenden Variablen ausgegeben RUN; FROM (SQL-Befehl) legt die Quelldatei(en) fest. FROM_dname1,_dname2 FROM_alias1.dname_AS_alias2 hier können auch alias-Namen vergeben werden; FROM_(SELECT.....) die entsprechende Tabelle kann auch durch eine geschachtelte SELECT-Routine erstellt werden (WHERE kann auf die darin enthaltenen Variablen zugreifen) GCHART (Procedure) erzeugt Säulen-, Balkengrafiken, Histogramme (Häufigkeitsverteilungen) im Grafikmodus PROC_GCHART_data=dname; VBAR_v1_/_discrete midpoints=a_TO_b RUN; GCONTOUR (Procedure) Darstellung von Isolinien einer 3-D-Grafik (X, Y, Z); Projektion auf die X-Y-Ebene; GENMOD (Procedure) analysiert mit Verallgemeinerte Linearen Modellen; Daten der Zielvariable müssen als Anteile (Wertebereich 0 bis 1; sollten dann im Modell erst als Quotient 'events/trials' berechnet werden), Anzahl oder quantitative Variable angegeben werden; die Einflußvariablen sind mindestens dichotom, bzw. ordinal oder (quasi-)stetig; es besteht die Möglichkeit, selbstdefinierte Link-Funktionen anzugeben (siehe Beispiel 12); PROC_GENMOD_data=dname; CLASS_veinfluss; hier werden die kategorialen Variablen angegeben, die bei MODEL verwendet werden. MODEL_vevents/vtrials=veinfluss; RUN; PROC_GENMOD_data=dname; CLASS_v1; MODEL_ve/vt=v1_/_obstats gibt für jede Beobachtung folgende Werte aus: Wert der Zielvariable, vorhergesagter Modellwert, Wert des linearen Prediktors (LP), Stdfehler des LP, Residuum, untere und obere KIGrenze für den Modellwert. _dist=bin gibt die Wahrscheinlichkeitsfunktion für das Modell an: 'nor' für Normalvtlg., 'bin' für Binomialvtlg., 'poi' für Poissonvtlg. _link=logit gibt die Link-Funktion an: 'identity' für eine exakt angepaßte Funktion, 'logit' für Logistische, 'log' für Log-, 'probit' für ***, 'cloglog' für ***. _type1 gibt einen Likelihood-Quotiententest für jeden Term des Modells (->Devianzen); dazu werden die einzelnen Einflußgrößen nacheinander (sequentiell) in der angegebenen Reihenfolge in das Modell aufgenommen; der Vergleich durch den L-Quot. erfolgt dann jeweils mit dem vorhergehenden Modell. _dspace; bei underdispersion kann diese Option zur Anpassung der Skalierung genutzt werden; after the parameter estimates have been determined, the exponential family scale parameter is assumed to be given by the deviance (mit pspace wird Pearson-Chi² verwendet) divided by the degrees of freedom, and all statistics are adjusted appropriately (dies wirkt sich dann auf die Konfidenzintervalle und p-Werte aus). MAKE_'tabelle'_out=dname; erzeugt eine Output-Datei, die die in der MODEL-Zeile (als Option) spezifizierte tabelle (oben z.B. obstats) enthält. RUN; GFONT (Procedure) zum Betrachten von SAS-Softwarefonts; GLM (Procedure) = General Linear Model; bestimmt Parameter für lineare Modelle, die Abhängigkeiten zwischen einer abhängigen und einer (mehreren ) unabhängigen Variablen beschreiben; eignet sich besonders für Modelle mit fixen Effekten (im MODEL-Statement werden hinter dem Gleichheitszeichen alle Effekte aufgeführt, fixe und zufällige; Variablen mit zufälligen Effekten müssen mit RANDOM extra benannt werden; bei mindestens einem zufälligen Effekt muß für paarweise Vergleiche mit MEANS der Nenner für die Berechnung des F-Testwertes umdefiniert werden: -> Option e=...); kann alle Analysen von PROC ANOVA und einige dazu; stetige Kovariablen werden im Modell anders als klassifizierende Variablen behandelt: Kategorielle Var. (-->βj) yijk = µ + αi + βj + eijk mit β1 + ... + βj = 0 Stetige Ko.-Var. (-->βj) yijk = µ + αi + β*x + eijk Mit LSMEANS berechnete korrigierte Mittelwerte werden anhand der Modellparameter geschätzt und würden bei diesen zwei Varianten unterschiedlich für den Einflußfaktor --> α ausfallen. testet H0: µ1=µ2=...=µi; vergleicht mehr als zwei Stichproben miteinander (Stichprobenumfänge können unterschiedlich sein); Teststatistiken, unterschieden nach dem Typ der Varianzzerlegung TYPE I für balancierte Daten; TYPE III für unbalancierte Daten (es dürfen aber einzelne nicht komplett fehlen); auch für balancierte; TYPE IV bei komplettem Fehlen einzelner Stichproben PROC_GLM_data=dname (where=(v1=Bedingung)); CLASS_vunabhängig; MODEL_vabhängig=vunabhängig _/_ss3; OUTPUT_out=dneu _residual=v1; RUN;_QUIT; PROC_GLM_data=dname; CLASS_&vmod1; MODEL_vab=_&vmod2; RUN; PROC_GLM_data=dname; CLASS_vu1 vu2; MODEL_vab=_vu1_vu2_vu1*vu2; (oder: MODEL_vab=_vu1|vu2;) einfaktorielle Varianzanalyse; where schränkt die verwendeten Gruppen ein. hier werden alle unabhängigen, kategorialen Einflußvariablen angegeben; zufällige Effekte müssen hier aufgelistet werden. Variablen, die hier genannt werden, aber nicht bei CLASS oder RANDOM auftauchen werden wie Kovariablen behandelt (->Kovarianzanalyse). bewirkt eine TypIII-Quadratsummenzerlegung. behält die Residuen, hier als Differenz zwischen dem Beob-Wert und dem Stichprobenmittel (für jede Stichprobe getrennt) und gibt vab und vunab mit aus. unabhängige Variablen und Modell wurden vorher als Globalvariable definiert: siehe %LET. zweifaktorielle Varianzanalyse mit fixen Effekten; unabhängige Faktoren vu1, vu2. vu1 und vu2 benennen die zwei Haupteffekte, die untersucht werden sollen, vu1*vu2 den Wechselwirkungseffekt. MEANS_vu1_vu2; vergleicht getrennt für vu1 und vu2 paardie Mittelwerte der einzelnen Stufen MEANS_v1_v2_/_tukey_cldiff; siehe MEANS LSMEANS_vu1*vu2_/_SLICE=vu2; siehe LSMEANS RUN; PROC_GLM_data=dname; zweifaktorielle Varianzanalyse mit zuCLASS_vu1 vu2; fälligen Effekten (Testergebnisse gelten MODEL_vab=_vu1_vu2_vu1*vu2; für eine größere Grundgesamtheit) RANDOM_vu1_vu2_vu1*vu2_/_test RUN; PROC_GLM_data=dname; zweifaktorielle Varianzanalyse mit geCLASS_vu1_vu2; mischten Effekten: vu1 ist fix, vu2 ist MODEL_vab=_vu1_vu2_vu1*vu2; zufällig, daß heißt die Testergebnisse für RANDOM_vu2_vu1*vu2_/_test vu2 gelten für eine größere GrundgesamtRUN; heit). PROC_GLM_data=dname; drei-(bzw. mehr)faktorielle VarianzanaCLASS_vu1_vu2_vu2; lyse MODEL_vab=vu1_vu2_vu3_ vu1*vu2_vu2*vu3_vu1*vu3_ vu1*vu2*vu3; Alternative Form der MODEL-Zeile __ MODEL_vab=_vu1|vu2|vu3; RUN; . PROC_GLM_data=dname; führt zweifaktorielle hierarchische VarianzanaCLASS_vu1_vu2; lyse durch (mit vu1=hierarchisch 1. Faktor); hier MODEL_vab=vu1_vu2(vu1); mit fixen Faktoren; mit entsprechend eingefügter RUN; RANDOM....../_test-Zeile wird der Test für zufällige Faktoren abgewandelt (s.o.). PROC_GLM_data=dname; CLASS_vu1_vu2; hier unabhängige Einflußfaktoren MODEL_vab=vu1_vu2_vu3 vu3 wird hier als Kovariable behandelt _vu2*vu3; Wechselwirkung mit der Kovariablen MEANS_vu2; berechnet unkorrigierte Mittelwerte, der Einfluß der Kovariablen (Einflußgröße vu1 ???) wird nicht herausgerechnet LSMEANS_vu2; berechnet korrigierte Mittelwerte, der Einfluß der Kovariablen vu3 und der Einflußgröße vu1 wird herausgerechnet. RUN; GLOBAL (Makro-Statement) ordnet einem Variablennamen die Eigenschaft ‚Globalvariable‘ zu. Diese Variablen können dann innerhalb eines Makros durch %let oder CALL SYMPUT mit Werten besetzt werden und bleiben auch nach Abschluß des Makros verfügbar. %GLOBAL_var1_var2_var3; GOPTIONS definiert Optionen für die Ausgabe im Grafikmodus; muß vor den betrffenden Grafik-Procedures stehen. GOPTIONS_reset=all setzt alle vorherigen Einstellungen auf Standardwerte zurück. _gsfname=alias _gsfmode=replace _gsfmode=append _device=aaa _hsize=xcm _vsize=ycm _keymap=winansi _devmap=winansi; GOTO bewirkt die Ausgabe in eine Datei; alias=>siehe FILENAME. bewirkt, daß bestehende Dateien überschrieben werden. bewirkt,daß in der bestehenden Datei die neue Information an die alte hinten angehängt wird. legt Grafikmodus fest; aaa entspricht der zugehörigen Dateinamenextension (z.B.: wmf). legt horizontale Grafikgröße in cm fest. legt vertikale Grafikgröße in cm fest. ermöglicht die Darstellung von Umlauten ermöglicht die Darstellung von Umlauten (Makro-Statement) ermöglicht Sprung zu anderen (mit einer Sprungmarke gekennzeichneten) Programmzeilen; das Programm wird hinter der Sprungmarke fortgesetzt. %GOTO_ende; ................ %ende: Achtung!!: die Sprungmarkenzeile endet mit einem Doppelpunkt ! GPLOT (Procedure) erzeugt für zwei Variablen XY-Diagramme mit Punktwolken, Geraden, Kurven, Regressionsgraden. (siehe auch unter PLOT) PROC_GPLOT_data=dname; PLOT_v1*v2; RUN; GREPLAY (Procedure) geeignet zur Darstellung mehrerer Grafiken in einer Abbildung und zum Ablauf von Animationen; GROUP BY (SQL-Befehl) erzeugt Untergruppen bei der ausgewählten Spalte (Variable); es werden dabei Zeilen mit gleichlautenden Einträgen (in der spezifizierten Variable) zusammengefaßt. Bezieht sich auf die Berechnungen (sum, v1+v2, etc) in der PROC SQL (dadurch Abgrenzung zu Einschränkungen, die mit WHERE erfolgen) GROUP_BY_vname G3GRID (Procedure) interpoliert zusätzliche Datenpunkte für 3-D-Grafiken (X, Y, Z), die später mit G3D oder GCONTOUR ausgegeben werden; liefert keine Grafiken. G3D ermöglicht 3-D-Diagramme mit PLOT oder SCATTER; PROC_G3D_data=dname; erzeugt Netzgrafik in XYZ-Diagramm; PLOT_y*x=z; RUN; PROC_G3D_data=dname; 3-D-Scatterplot: Darstellung der Datenpunkte im SCATTER_y*x=z; XYZ-Diagramm (Punktwolke, Nadeldarstellung). RUN; HAVING IF IML (SQL-Befehl) selektiert Zeilen eines Datensatzes; wird mit KenngrößenAbfragen wie min, max, etc. (für die Auswahlbeschränkung) verwendet (im Gegensatz zu WHERE) oder mit durch AS neu definierten Variablen verwendet; HAVING_min(v1)<=10 der nachfolgende Programmteil wird nur unter bestimmten Bedingungen ausgeführt; wird in DATA-Steps verwendet. IF_(Bedingung) _THEN_c=d; ELSE_c=e; IF_(a=b) _THEN_ DO; mit einer DO-Schleife können mehrere Befehle c=d; unter THEN und ELSE eingebaut werden f=g; END; ELSE_c=e; IF_var_IN_(a,_b,_c); die Bedingung ist wahr, wenn var den Wert a, b oder c annimmt. IF_(a=b)_THEN_GOTO_p1; wenn die Bedingung wahr wird, springt das Programm zur Marke p1 (im Programm als Zeile p1: markiert) IF_(Bedingung); in dieser Kurzform wirkt sich die IF-Schleife so IF_(_N_<a); aus, daß der gerade bearbeitete Datensatz nur dann in das Dat-File übernommen wird, wenn die Bedingung erfüllt ist (im Beispiele nur die Datensätze, wo obs kleiner 8 ist). IF_v1; diese Kurzform fragt nur nach wahr (v1=1 oder v1^=0) oder falsch (v1=0): die Bedingung ist bei ‚wahr‘ erfüllt. BY_v1_v2; IF_FIRST.v1_THEN_c=d; wird wahr, wenn in der vertikalen Abfolge der Werte von v1 eine neuer Wert auftaucht (macht nur Sinn, wenn vorher nach dieser Variable sortiert wurde); v1 muß vorher mit BY-Statement genannt werden. BY_v1_v2; IF_LAST.v1_THEN_c=f; (s.o.) wird wahr, wenn der letzte gleiche (wie die vorhergehenden) Wert von v1 erreicht wird (also vor einem Wechsel zu einer anderen Ausprägung); v1 muß vorher mit BY-Statement genannt werden. (Procedure) ermöglicht die Anwendung der Interactive Matrix Language in SAS; (Matrizen werden hier in der Beispielsyntax mit m... bezeichnet); PROC_IML; USE_dname; benennt DATA-Set, das hier benutzt werden soll. READ_ALL_INTO_m1; liest dname komplett und in der vorgegebenen Anordnung in die Matrix m1 ein; dname darf dann nur numerische Variablen enthalten. USE_d2_WHERE(Bedingung); schränkt die aus d2 verwendeten Datenzeilen durch die Bedingung ein. READ_ALL_VAR{v1_v2_v3}_INTO_m2; schränkt die einzulesenden Variablen ein. n=NROW(m1); übergibt an n die Zeilenanzahl von m1 DO_i=1_TO_b; Schleifenverwendung ist möglich. c=m1[z,s]; gibt in c den Wert der z-ten Zeile und s-ten Spalte der Matrix m1 aus m2=m1[{z1_z3},{s1_s2}]; gibt in m2 eine Teilmatrix von m1 aus; jeweilige Zeilen und Spalten sind hier explizit aufgeführt. m2=m1[(z1:z2),(s1:s2)]; gibt in m2 eine Teilmatrix von m1 aus; hier als Zeilen- und Spalten array von m1 angegeben. vektor1={z1,z2,z3}; vektor2={s1,s2}; m4=m1[vektor1,vektor2]; gibt in m2 eine Teilmatrix von m1 aus; in den Vektoren ...1 und ...2 wurden vorher die Zeilen- und Spalten-Nr. explizit angegeben. END; CREATE_dn3_FROM_m3; aus m3 soll die Datei dn3 erzeugt werden. APPEND_FROM_m3; hier werden die aus m3 zu verwendenden Daten ausgewählt (in diesem Fall alle). QUIT; IN ermöglicht die Angabe einer Liste von Werten für Bedingungen oder vergleichende Operatoren; IF_v1_IN_(a,_b,_c); wird wahr wenn der Wert von v1 gleich a, b oder c ist. IN (für SQL) ermöglicht die Angabe einer Liste von Werten für Bedingungen oder vergleichende Operatoren in einem WHERE-Statement; WHERE_v1_IN_(a,_b,_c); wird wahr wenn der Wert von v1 gleich a, b oder c ist. INDEX (SQL-Befehl) erzeugt einen spaltenbezogenen Index, mit dem eine Beschleunigung von Such- oder Sortierverfahren; mit UNIQUE wird definiert, und auch bei zukünftigen Eingaben kontrolliert, daß die angegebenen Spalten zusammen einen eindeutigen Schlüssel für den jeweiligen Datensatz bilden. CREATE_INDEX_iname_ON_tname_(sp1, sp2, sp3) iname =Indexname CREATE_UNIQUE_INDEX_iname_ON_tname_(sp1, sp2) INFILE bestimmt eine ASCI-Datei, mit der ein neues Data-Set erzeugt werden soll; es muß ein INPUT folgen (hier können auch @@ verwendet werden, um Daten aus in der Quelldatei aufeinanderfolgenden Spalten in eine Spalte im Data-Set einzulesen), bei dem alle Variablennamen neu vergeben werden müssen. INFILE_‘pfad\dname‘_firstobs=a der erste zu lesende Datensatz befindet sich _obs=b in der a-ten Zeile, der letzte in der b-ten Zeile der ASCI-Datei; _lrecl=a die Gesamtlänge eines Datensatzes beträgt a Zeichen. _pad _missover _expandtabs _dlm=‘x‘; gibt an, ob der Datensatz bei fehlenden Werten mit Blanks bis zur Gesamtlänge (lrecl=..) aufgefüllt ist. verhindert, daß, wenn im Listenformat eingelesen wird, bei fehlenden Werten in eine neue Zeile gewechselt wird; die fehlenden Werte werden auf missing gesetzt. gibt an, daß die Werte im Datenfile durch tabs getrennt sind. hier kann ein spez. Zeichen (x) definiert werden, das im Datensatz die Variablen trennt. INNER (SQL-Befehl) siehe JOIN. INPUT liest Variablen ein; (falls das Einlesen mit Hilfe einer DO-Schleife erfolgt, muß innerhalb der Schleife ein OUTPUT-Befehl erscheinen, um die Werte in das DataSet auszugeben) INPUT_vname1_vname2; INPUT_vname_@@; mit @@ brauchen die Datensätze nicht getrennt in Zeilen stehen. INPIUT_va-vb; dies ist bei durchnummerierten Variablennamen (durch angehängte Zahl) möglich; es werden Werte für die Variablen Nr. a bis Nr. b eingelesen. INPUT_vname1 a-b; spaltengesteuertes Einlesen: der Wert für vname wird vom a-ten bis zum b-ten Zeichen eingelesen. INPUT_@a_v1_b. formatgesteuertes Einlesen: innerhalb einer Daten_@c_v2_$chard.; zeile werden beginnend bei Position a (bzw. c) b Zeichen (bzw. d Zeichen) eingelesen; (Man achte auf den Punkt nach dem b und dem d bei der Formatangabe !!) INPUT_@a_(vb-vc)_(d*f.); beginnend beim a-ten Zeichen werden d-mal (mit d=c-b+1) f Zeichen in die entsprechend nummerierte Vaariable v... einglesen. INPUT_#a_v1_#b_v2_v3; die Variablen für den einzulesenden Datensatz stehen in den Zeilen a und b (mit jeder INPUTSchleife wird für a und wieder neu angefangen zu zählen). Alphanumerische Variablen: (Man achte auf den Punkt nach dem a bei der Formatangabe !!) INPUT_vname1$_vname2$; INPUT_vname$a.; liest Variablen, die aus a Zeichen bestehen und beliebig viele Leerzeichen enthalten können. INPUT_vname$:a.; liest Variablen, die aus a Zeichen bestehen und keine Leerzeichen enthalten. INPUT_vname$&:a.; liest Variablen, die aus a Zeichen bestehen und einfache Leerzeichen enthalten INPUT_vname_&_$; liest einfache Leerzeichen mit ein; die Einträge müssen durch doppelte Leerzeichen getrennt werden. INSERT (SQL-Befehl) schreibt neue Datensätze in schon bestehende Tabellen; es müssen Einträge für alle Spalten der Tabelle angegeben werden; es wird dann der 1. Eintrag in die 1. Spalte geschrieben usw. INSERT_INTO_tname_VALUES_('Text1', 'Text2', wert1, wert2); INSERT_INTO_tname(sp1,sp2)_VALUES_(wert1, wert2) VALUES_(wert3, wert4); INSERT_INTO_tabneu(sp1,sp2,sp3)_SELECT_sp4, sp5, sp6_FROM_tabalt; JOIN (SQL-Befehl) erstellt neue Tabellen durch Verknüpfung von Zeilen aus verschiedenen Tabellen; mit ON wird dabei eine Schlüsselvariable definiert, über die eine Zuordnung der Zeilen aus verschiedenen Tabellen erfolgt (die Variable muß in allen zu verknüpfenden Tabellen vorkommen). SELECT_*_FROM_ gibt alle möglichen Zeilenverknüpfungen von t1 und t1_INNER_JOIN_t2_ t2 aus, wo t1.v1 und t2.v1 übereinstimmen; die übriON_t1.v1=t2.v1; gen Zeilen werden nicht ausgegeben; alle Spalten aus t1 und t2 werden beibehalten. SELECT_*_FROM_ wie oben, gibt aber auch alle Zeilen aus t1 ohne t1_LEFT_JOIN_t2_ Übereinstimmung mit aus (ergibt dann missing ON_t1.v1=t2.v1; values in den von t2 übernommenen Spalten) SELECT_*_FROM_ wie oben, gibt aber alle Zeilen aus t2 ohne t1_RIGHT_JOIN_t2_ Übereinstimmung mit aus (ergibt dann missing ON_t1.v1=t2.v1; values in den von t1 übernommenen Spalten) SELECT_*_FROM_ wie oben, gibt aber alle Zeilen aus t1 und t2 ohne t1_FULL_JOIN_t2_ Übereinstimmung mit aus (ergibt dann missing ON_t1.v1=t2.v1; values in den jeweils übrigen Spalten) KEEP überträgt nur die angegebenen Variablen (Spalten) in den Data-Set KEEP_v1_v2; übernimmt nur die Variablen v1 und v2 LABEL vergibt Label für Variablen; LABEL_v1="Bezeichnung1" _v2="Bezeichnung2" _v3="Bezeichnung3"; LEGENDa definiert Legende Nr.a für eine Grafik; die Zuordnung zur betreffenden Grafik erfolgt mit dem Befehl PLOT. LEGENDa_value=(‘n1’_’n2’) legt die Namen für die unterschiedenen Fälle fest. _label=(‘name’) Übergeordneter Name der gezeigten Fälle. _frame; erzeugt einen Rahmen um die Legende. LENGTH legt die maximale Länge eines Eintrages für eine Variable fest; im DATA-Step; LENGTH_vname_a; a gibt die Länge der Variable in Bytes an. LENGTH_v1_v2_a; LET definiert Global-/Makrovariablen; v1 kann dann als &v1 im späteren Programmablauf aufgerufen werden; in einem Dateiaufruf für ein SAS-Dataset kann in &v1 der Dateiname und/oder der Libname enthalten sein. Achtung: wenn in der %LET..-Zeile rechts vom ‘=‘ Operatoren oder Funktionen auftauchen, die beim Aufruf der G.variable ausgeführt werden sollen, um den zu übergebenden (Text-)Inhalt der G.-variable zu erzeugen, dann muß in einem DATA-Step der G.-var.-Aufruf ohne doppelte Hochkommas erfolgen (sonst wird der dort stehende Funktionstext komplett übergeben); neue, aus mehreren Teilstrings zusammengesetzte Variablennamen können mit Funktionen in dieser Form nicht erstellt werden. %LET_v1=a; %LET_vmod1='vu1_vu2'; übergibt Text mit Hochkommas %LET_vmod2='vu1_vu2_vu1*vu2'; %LET_v1=‘text1‘||‘text2‘; v1 wird aus text1 und text2 zusammengesetzt. %LET_v1=“&v3“||‘text2‘; v1 wird aus dem Inhalt der Globalvariable v3 und text2 zusammen-gesetzt (beachte doppelte Hochkommas). %LET_v1=put(“&v3“,_$chara.)||‘text3‘; der Inhalt der Globalvariable v3 wird vor dem Zusammenfügen auf einen String der Länge a Zeichen gebracht (!! beachte ‘.‘ hinter a !!). LIBNAME Ermöglicht die Vergabe von ‚alias‘-Namen für Datei-Libraries, die jeweils einem bestimmten Unterverzeichnis zugeordnet sind; dabei können ‚Engines‘ (z.B. verschiedene SAS Versionen, SPSS, etc.) definiert werden; falls sich im selben Verzeichnis SAS-Datendateien von verschiedenen SAS-Versionen befinden, muß für jede Version ein separater Libname eingerichtet werden; nur SAS-Datendateien, die während des Programmablaufs unter einem Libname angelegt werden, bleiben nach dem Schließen von SAS erhalten. LIBNAME_alias_“pfad“; pfad gibt den kompletten Pfad für das entsprechende Unterverzeichnis an. LIBNAME_alias_engine_“pfad“; LIBNAME_libref_V6_“pfad“; ermöglicht den Zugriff auf Datendateien der Version SAS 6... LIBNAME_alias_SPSS_“pfad\datei.por“; zum Einlesen von SPSS-portableDATA_neu; Datendateien (nur diese SPSS-Dateien SET_alias._first_; sind verwendbar !!!); der Libname RUN; verweist direkt auf die Datei! mit _first_ wird auf die erste SPSS-Tabelle verwiesen. LOGISTIC (Procedure) testet logistische Modelle; kann bei der Zielgröße nur binärcodierte Variable und bei den Einflußgößen nur quantitativ-stetige oder binärcodierte Variablen bearbeiten (bei kategorialen Variablen mit >2 Faktorstufen ist eine Umcodierung in dichotome Dummyvariablen notwendig: die adjustierten oddsratios beziehen sich dann im Chancen-Vergleich immer nur auf die nicht explizit umcodierte (Kontroll- bzw- Referenz-)Stufe der Ursprungsvariable).. Syntax-Hinweis: im MODEL-Statement kann ' | ' für die Verknüpfung der Einflußgrößen nicht verwendet werden. Wichtig: PROC LOGISTIC erwartet normalerweise aufsteigende Kodierungsreihenfolge, wobei die Kontrollen den höheren Wert haben (also z.B. Fälle=1 und Kontr.=2); daher bei Fall=1, Kontr.=0 die Option descending verwenden! PROC_LOGISTIC_data=dname _descending; MODEL_vres=vu1_vu2_/ _link=.... _rl _alpha=a; RUN; PROC_LOGISTIC_data=dname; MODEL_vev/vges=vu1_vu2; dreht die Codierungsreihenfolge der dichotomen Zielvariable um. vres = Response-Variable (dichotom); vu1 und vu2 = unabhängige Einflußvariablen. die Link-Funktion kan hier spezifiziert werden: ...=logit (default), ...=cloglog, ...=normit; (risklimits) gibt Konfidenzintervalle für die Odds-Ratios aus. bestimmt den alpha-Fehler mit 0<a<1. vev = Anzahl der positiven events; vges = Gesamtanzahl der positiven und negativen events ; vu1 und vu2 = unabhängige Einflußvariablen. RUN; PROC_LOGISTIC_data=dname; MODEL_vres=vu1_vu2; FREQ WEIGHT RUN; LSMEANS führt mit zusätzlichen Optionen paarweise Mittelwertvergleiche (Test) durch (diese Tests sind bei zufälligen Effekten nicht sinnvoll); kann auch für unbalancierte Daten verwendet werden; gibt korrigierte Mittelwerte aus, wenn z.B. Kovariable im Model mit berücksichtigt wird; korrigierte Mittelwerte werden anhand der geschätzten Modellparameter berechnet (siehe PROC GLM); führt F-Tests auf Gleichheit der Effekte verschiedener Stufen von Faktor A für verschiedene Stufen von Faktor B durch (-> zweifaktorielle Varianzanalyse) LSMEANS_vu1*vu2_/_SLICE=vu2; testet die H0 "die Effekte aller Stufen von vu1 sind gleich Null" mit einem F-Test für verschiedene Stufen von vu2. LSMEANS_v1_/_pdiff=all spezifiziert, welche Gruppen miteinander verglichen werden; hier: jede mit jedem. =control('name') gibt die Gruppe an, mit der alle anderen verglichen werden, z.B. für zweiseitigen Dunnett-Test-Option; name gibt den Eintrag in der Spalte der Klassifizierungsvariable an, der die(Kontroll-)Gruppe klassifiziert. =controlu('name') einseitiger Test bei Vergleich mit einer (Kontroll-)Gruppe (name: s.o.); es sollen Abweichungen von der Kontrolle nach oben (u=upper) bewiesen werden (also H0: µ1<=µi mit µ1 von Kontrolle); =controll('name') einseitiger Test bei Vergleich mit einer (Kontroll-)Gruppe (name: s.o.); es sollen Abweichungen von der Kontrolle nach unten (l=lower) bewiesen werden (also H0: µ1<=µi mit µ1 von Kontrolle); _adjust=tukey spezifiziert Adjustierungsmethode fürpaarweisen Vergleich der Mittelwerte; hier: Tukey =dunnett Adjustierung nach Dunnett; bei Verglei-chen mit nur einer Kontrollgruppe; siehe auch Option pdiff. =t führt einen multiplen t-Test (ohne Adjustierung) zum lokalen Niveau α durch. =bon multipler paarweiser Vergleich mit BonferoniAdjustierung des multiplen Niveaus. _e=va*vb gibt für die F-Statistik einen vom Normalfall abweichenden Nenner (hier die mittlere Quadratsumme für va*vb) für die Berechnung des F-Testwerts an; wird bei PROC GLM für Dunnett benötigt. _cl gibt Konfidenzintervalle für Mittelwerte aus _alpha=a; _t legt das Signifikanzniveau auf a fest. führt multiplen t-Test mit paarweisen Vergleichen zum lokalen Niveau α durch; gibt T-Wert und Probability aus. MACRO Definiert ein Unterprogramm/Macro; diese können gespeichert werden; der Dateiname muß mit dem Macronamen übereinstimmen; mit %IF, %THEN, %DO, %END können Gruppen von Anweisungen/Procedures bedingt ausgeführt werden; innerhalb von eingefügten DATA-Steps oder Procedures oder wenn das Makro aus einer Procedure oder DATA-Step heraus aufgerufen wird, werden die (Schleifen)Befehle ohne % verwendet; Variablen werden innerhalb des Macros grundsätzlich als Text (string) eingelesen. (siehe angehängtes Beispiel 1a und 1b). Im Programmablauf muß erst die Macro-Syntax abgearbeitet werden, bevor das Macro funktional aufgerugen werden kann. Bei der Verwendung von Makros innerhalb von SQL muß darauf geachtet werden, daß “;“ in dem Makro zum Abbruch/Ende der SQL-Prcedure führen. %MACRO_mname(mv1=_, mv2=_, mtext=_); das Macro wird erst durch den Aufruf %mname ausgeführt (s.u.); der Aufruf übergibt dabei die angegebenen Bezeichnungnen (Strings) an die Macrovariablen mv1 und mv2, bzw. den ‘text‘ an mtext; innerhalb des Macros werden die M.-variablen dann mit &... aufgerufen; am Ende des Makros werden die Werte der M.-variablen wieder an die ursprünglichen zurück gegeben. (siehe Beispiel 1c) PROC_...._data=&mv1; VAR_&mv2; innerhalb des Macros muß mv2 mit dem Präfix & versehen werden. RUN; %MEND_mname; beendet das Unterprogramm/Macro. Aufruf des Macros: sollte im Prrogrammtext in der Reihenfolge nach der Syntax des Makroprogramms stehen (SAS muß die Makrosyntax erst gelesen haben) %mname(mv1=dname,_mv2=vname, mtext=‘text‘); in dieser Form werden den Macrovariablen die Strings direkt zugewiesen (s.o.). %mname(dname,_vname; ‘text‘); es können auch nur die zu übergebenden Werte/Texte angegeben werden; dann muß hier aber die Reihenfolge genau mit der in der %MACRO...-Zeile übereinstimmen. %INCLUDE_‘pfad\mname.sas‘; liest das Macro mname in den Programmtext ein MEANS (Procedure) ermöglicht die Berechnung verschiedener Kennzahlen von Einstichproben; Voreinstellung ist n, mean, std dev, min, max; darüber hinaus muß einzeln aufgerufen werden: hier wird das Ergebnis als Datei abgespeichert und kann dann erst auf den Bildschirm ausgegeben werden PROC_MEANS_data=dname; VAR_v1_v2; RUN; PROC_MEANS_data=dname; mit OUTPUT könne die Ergebnisse in einer Datei VAR_v1_v2; abgespeichert werden; ID_v3_v4; übernimmt die Werte von v3 und v4 aus dname OUTPUT_out=dname Dateiname der Ausgabedatei _n=v11_v21 Anzahl der Beobachtgn., getrennt für v1 und v2 _nmiss=v12_v22 fehlendeWerte, getrennt für v1 und v2 _mean=v13_v23 Mittelwert, getrennt für v1 und v2 _std=v14_v24 Standardabweichung, getrennt für v1 und v2 _min==v15_25 Minimum, getrennt für v1 und v2 _max=v16_v26 Maximum, getrennt für v1 und v2 _var=v17_v27 Varianz, getrennt für v1 und v2 _sum=v18_v28; Summe, getrennt für v1 und v2 RUN; MEANS berechnet und vergleicht Mittelwerte zu verschiedenen Gruppen einer Variable, die durch eine Klassifizierungsvariable differenziert werden; funktioniert nur mit balancierten Daten korrekt ! (bei unbalancierten Daten LSMEANS verwenden); gibt keine korrigierten Mittelwerte aus; Verwendung z.B. in PROC ANOVA oder PROC GLM; muß nach dem MODEL-Statement kommen; führt mit zusätzlichen Optionen paarweise Mittelwertvergleiche (Test) durch (ist bei zufälligen Effekte nicht sinnvoll); MEANS_vname berechnet die Mittelwerte für die einzelnen Klassen von vname MEANS_v1_/_tukey führt einen Tukey-Test (mit Adjustierung) auf paarweise _alpha=a Unterschiede zwischen den Mittelwerten durch (α=a gilt _cldiff; dann für das gesamte Experiment); (H0:µ1=µ2); cldiff gibt das simultane Vertrauensintervall an. MEANS_v1_/_bon; multipler paarweiser Vergleich mit BonferoniAdjustierung des multiplen Niveaus. MEANS_v1_/_dunnett('name') führt einen multiplen Test nach Dunnett durch; hier werden alle Stichproben mit einer Kontrollgruppe (durch 'name' spezifiziert) verglichen (H0:µk=µ2); (α=0.05 gilt für alle Vergleiche simultan). _e=va*vb; gibt für die F-Statistik einen vom Normalfall abweichenden Nenner (hier die mittlere Quadratsumme für va*vb) für die Berechnung des F-Testwerts an; wird bei PROC GLM für Dunnett benötigt. MEANS_v1_/_t; führt einen multiplen t-Test (ohne Adjustierung) zum lokalen Niveau α durch. MEANS_v1_/_sidak; führt einen multiplen t-Test mit Adjustierung durch (H0:µ1=µ2); (α=0.05 gilt dann für das gesamte Experiment). MEANS_v1_/hovtest=bartlett; Homoskedastizitätstest nach Bartlett; verwendet Varianzen (vom Mittelwert) -> Ausreißer empfindlich; wird in der Regel nicht verwendet. MEANS_v1_/hovtest=bf; testet auf Homoskedastizität (Gleichheit der Varianzen) verschiedener Stichproben (eine Normalverteilung der Varianzen ist hier nicht Voraussetzung); führt einen modifizierten Levene-Test nach Brown und Forsythe durch (-> bei PROC GLM); von den hier möglichen der beste Test. MEANS_v1_/hovtest=levene_(type=square) ...=abs); testet auf Gleichheit der Varianzen bei versch. Stichproben (Homoskedastizitätstest nach Levene); berücksichtigt die (quadrierten oder absoluten) Abweichungen vom Median und ist daher robuster gegen Ausreißer (Original-Levene ist mit absoluten Differenzen). MERGE Verknüpfungen von Beobachtungen aus verschiedenen Data-Sets zu einem neuen Data-Set; im DATA-Step; bei der Verwendung von BY sollten außer den BYVariablen keine Variablennamen bei den Dateien übereinstimmen; (siehe auch Beispielprogramm 4 und zugehörige Erklärungen). MERGE_dname1_dname2; One-to-one: erster Datensatz aus dname1 wird mit erstem Datensatz aus dname2 verknüpft, usw. MERGE_dname1_dname2; Match: es werden die Datensätze miteinander BY_vname; verknüpft, bei denen vname übereinstimmt; hier müssen vorher beide Dateien dname1 und dname2 mit PROC SORT nach der Variable vname sortiert werden. MERGE_d1_(firstobs=a) firstobs legt Anfangsdatensatz in der jeweiligen _d2_(firstobs=b); Datei fest. DATA_dneu; es werden nur die Datenzeilen an dneu MERGE_d1(in=in1)_d2(in=in2); übergeben, die in v1 bei d1 und d2 gleiche IF_in1_AND_in2; Werte aufzeigen (in1 ist eine Variable, die BY v1; wahr oder falsch, also 0 oder 1 sein kann; RUN; IF in1.. ist gleichbedeutend mit IF in1=1... DATA_dneu; MERGE_d1(in=in1)_d2(in=in2); IF_in1_AND_NOT_in2; übergibt nur Zeilen von d1, die in v1 BY_v1; keine Übereinstimmung mit d2 haben. RUN; Ein Verfahren, um einzelne Zeilen an alle Datensätze anzuhängen (ohne MERGE): SET_d1; (in einem DATA-Step) d2 besteht nur aus einer IF_(_N_=1)_THEN_SET_d2; Datenzeile; der erste Durchlauf der DATA-Schleife liest die erste Zeil von d2 ein und hängt diese an die erste von d1; bei folgenden Durchläufen behält SAS die Werte aus d2 und hängt sie an alle folgenden Zeilen von d1 an. MIXED (Procedure) für gemischte Modelle; im MODEL-Statement werden hinter dem Gleichheitszeichen nur die (Variablen mit) fixen Effekte aufgeführt; im RANDOMStatement werden die zufälligen Effekte angegeben; hier werden die Nenner bei der Berechnung des F-Testwert automatisch korrekt ausgewählt; testet H0: µ1=µ2=...=µi; vergleicht mehr als zwei Stichproben miteinander (Stichprobenumfänge können unterschiedlich sein); PROC_MIXED_data=dname; hier: zweifaktorielle Varianzanalyse mit CLASS_vu1_vu2; zufälligen Effekten (Testergebnisse gelten MODEL_vab=_; für eine größere Grundgesamtheit) RANDOM_vu1_vu2_vu1*vu2; RUN; PROC_MIXED_data=dname_nobound; die Option verhindert, daß das Modell bei negativen Varianzkomponenten automatisch von SAS verändert wird. CLASS_vu1_vu2; MODEL_vab=vu1_vu2 _ddfm=satterthwaite; bewirkt die Verwendung gewogener FG bei der Auswahl des t-Quantils für die bestimmung der Konfidenzintervalle von Mittelwerten (bei mehrfaktoriellen Anlagen eine Adjustierung, da bei den Schätzungen verschiedene/zusätzliche Fehlerterme auftauchen) LSMEANS_vu1_/_cl; RUN; MODEL wird in verschiedenen Procedures (siehe dort: ANOVA, CATMOD, GENMOD, GLM, MIXED, PROBIT, REG, PHREG) zur Spezifikation einer Modellannahme verwendet; NOTE definieren eines Textes für die Ausgabe; kann nur innerhalb einer Procedure erfolgen; NOTE_c=blue color; Farbe des Textes _f=swissl fond; verwendete Schriftart (hier swissl'). _h=a_pct height; Textgröße; pct=Größenangabe in Prozent (percent). _move=(10,95)_pct`; positioniert den Text mit prozentualen (pct=percent) X-, Y-Koordinaten. NPAR1WAY (Procedure) hier ist der Rangsummentest nach Wilcoxon implementiert (verteilungsfreier Test); Vergleich der Mediane zweier Stichproben; die Werte beider Stichproben müssen in einer Spalte stehen; H0: die Mediane sind gleich. PROC_NPAR1WAY_data=dname_wilcoxon; die zwei Stichproben werden mit CLASS_vname; vname unterschieden. VAR_vabhängig; RUN;_QUIT; ON (SQL-Befehl) siehe JOIN. OPTIONS hiermit können verschiedene Grundeinstellungen für den Ablauf und die Ausgabe des SAS-Programms definiert werden; die eingesstellten Optionen können auch im Options-Fenster (Aufruf z.B. über die Command-Zeile) eingesehen werden. OPTIONS_nofmterr hiermit können SAS-Programme zum Laufen gebracht werden, deren notwendige Formatdatei fehlt. nonumber unterdrückt die Seitennummerierung im Output nodate unterdrückt die Datumangabe beim Output ORDER BY (SQL-Befehl) sortiert Datensätze ORDER_BY_v1,_v2_desc sortiert die Datensätze nach v1 aufsteigend (defaultEinstellung; kann auch mit asc festgelegt werden) und nach v2 absteigend OUTER (SQL-Befehl) siehe UNION. OUTPUT erzeugt die Ausgabe eines Datensatzes (= einer Datenzeile) in ein Data-Set OUTPUT_dname; optional kann der Name der Zieldatei (in der DATAZeile genannt) angegeben werden. PHREG (Procedure) eigentlich für Überlebenszeitanalysen mit dem Cox-Modell; kann durch spezifisch getrickste Anwendung auch für die logistische Regression bei gematchten Fall-Kontroll-Studien (Matching-Verhältnis 1 :1, 1 : n, m : n) benutzt werden; die Response-Variable (vresp) muß >0 codiert sein, wobei die Kontrollen gegeüber den Fällen den größeren Wert haben sollen; über die Censor-Variable (vcens) wird die Fall=1, Kontrolle=0 Codierung wieder eingebracht; (Syntax hier für gematchte Fall-Kontroll-Studie) PROC_PHREG_data=dname; MODEL_vresp*vcens(a)=v1_/ vresp wird zensiert, wenn zugehöriges vcens den Wert a hat (hier a=0 für Kontrolle). _ties=discrete discrete bewirkt, daß das Proportional Hazard Model durch das Discrete Logistic Model ersetzt wird; kann für alle Matchingverhältnisse verwendet werden. ...=breslow wenn keine Bindungen (ties) vorliegen (1 : 1 oder 1 : n), ist breslow am effektivsten. _selection=.... _rl; STRATA_vstrat; spezifiziert die Methode, nach der relevante Modelkomponenten selektiert werden: none, backward, forward, stepwise, score. gibt Konfidenzintervalle für die geschätzten Parameter (Odds-Ratios) aus. vstrat differenziert die gematchten Gruppen (1 Fall + n Kontrollen); jede Gruppe ist ein Stratum. RUN; (Syntax hier für Cox-Modellierung von Überlebenszeiten: Proportional Hazard Modell) PROC_PHREG_data=dname; MODEL_time*vcens(a)=v1_/ time enthält die Überlebenszeit; vcens zeigt mit dem Wert a an, dass diese Beobachtung zensiert wurde, dass das Zielereignis in der angegebenen Zeit also nicht aufgetreten ist. _selection=.... spezifiziert die Methode, nach der relevante Modelkomponenten selektiert werden: none, backward, forward, stepwise, score. _rl; gibt Konfidenzintervalle für die geschätzten Parameter (Odds-Ratios) aus. STRATA_vstrat; vstrat differenziert Strata; when the STRATA_vstrat(5,10,20); proportional hazards assumption isn't realistic for all the data, then it may be appropriate to perform a stratified analysis in which each strata contributes a component to the overall likelihood. The STRATA statement names the variables whose values are to determine the stratum levels. The unique values of the STRATA variables determine the strata if these variables are character or numeric and there is no list. If a list is supplied, then the strata are determined by the intervals defined by the cutpoints on the list. BASELINE_out=dneu hier können für bestimmte Werte der _covariates=dwerte Covariablen (die Datei, die die entsprechenden Werte(-vektoren) enthält, wird mit der Option covariates angegeben; die Datei muss vorher erzeugt werden; werden keine Werte vorgegeben, benutzt SAS automatisch die Mittelwerte der Beobachtungen zu den jeweiligen Variablen) jeweils getrennt Überlebenszeiten _ survival=vname (der Name der Ausgabevariabel wird mit survival=.... angegeben) geschätzt werden, die dann mit PROC GPLOT dargestellt werden können; _/_nomean ; verhindert die Ausgabe von Überlebenszeiten zu den jeweiligen Mittelwerten der Einflußvariabeln. RUN; PLAN (Procedure) erzeugt eine zufällige Reihenfolge von Beobachtungseinheiten (bei vorgegebener Anzahl der Einheiten); PROC_PLAN_seed=a; Option seed setzt einen Startwert (a) für Zufallsgenerator; muß zwischen 0 und 2147483647 liegen. FACTORS_v1=b b gibt die Anzahl der Beobachtungseinheiten an; _ordered bewirkt keine Randomisierung z.B. für Blockfaktor; _random; erzeugt randomisierte Anordnung der Zahlen 1 bis b. RUN; PROC_PLAN_seed=&vg; hier wird die Global-/Makrovariable vg eingesetzt FACTORS_v1=b_ordered erzeugt innerhalb der b Gruppen eine zufällige _v2=c_random; Reihenfolge der Zahlen 1 bis c; v2 ist v1 OUTPUT_out=dname; hierarchisch untergeordnet. RUN; PLOT (Procedure) erzeugt X-Y-Grafiken im Textmodus. PLOT erzeugt X-Y-Grafiken in Procedure PLOT oder GPLOT PLOT_y*x_=_vname; y=abhängige Variable; die Datenpunkte werden nach der Variable vname farblich differenziert. PLOT_y*x_/_frame erzeugt einen Rahmen um die Grafik. _vref=0 erzeugt bei 0 eine horizontale Referenzlinie. _href=0 erzeugt bei 0 eine vertikale Referenzlinie _chref=color color gibt die Farbe der vertikalen Ref.-linie an. _lhref=a; a legt den Linientyp der vertikalen Ref.-linie fest. PLOT_y1*x1_y2*x2; erzeugt zwei getrennte Diagramme. PLOT_ y1*x1_y2*x2_/_overlay; legt beide Kurven in ein Diagramm. PLOT_y1*x1=a_y2*x2=b; weist den Daten die Grafik-Definitionen von SYMBOLa bzw. b zu. PLOT_y1*x1=v1; zeichnet mehrere Kurven, deren Werte nach der Klassifizierungsvariable v1 unterschieden werden. PRINCOMP (Procedure) führt Hauptkomponentenanalyse (Principal Component Analysis; PCA) durch; es werden Eigenvektoren für die PC und Wichtungsfaktoren für die Originalvariablen (bezüglich der PC) ausgegeben; falls Korrelationsmatrizen als Rohdaten verwendet werden, muß dies über eine im DATA-Step entsprechende spezifizierte Datei geschehen. PROC_PRINCOMP_data=dname _cov so verwendet SAS die Covarianzmatrix; default ist die Korrelationsmatrix. _out=d1 schreibt die Werte der Originalvaraiblen und die Hauptkomponenten- Scores für die einzelnen Beobachtungen in die Datei d1. _outstat=d2; schreibt zugehörige Statistik (Mittelwert, Standardabweichung, Anzahl der Beobachtungen, Kovarianz- oder Korrelationsmatrix, Eigenwerte, Eigenvektoren/Hauptkomponenten) in Datei d2. VAR_v1_v2_v3; RUN; PRINT (Procedure) erzeugt eine Ausgabe auf dem Bildschirm (im out-Fenster) PROC_PRINT_data=dname; RUN; PROC_PRINT_data=dname; VAR_v1_v2; gibt nur die Variablen v1, v2 aus. WHERE_Bedingung; gibt nur die Datensätze aus, wo die Bedingung erfüllt ist. RUN; PROBIT (Procedure) macht Probit-Analysen zu Dosis-Wirkungs-Beziehungen; betrachtete Modelle sind 1.) Φ−1 (p(d))= α + β ∗ log (d) mit vres'=p(d) (= relative Häufigkeit von vres in einer durch vlog spezifizierten Gruppe; vres = Reaktion, z.B. durch 0 und 1) und vlog=log(d) und d=applizierte Dosis (Φ−1 wird automatisch von PROC PROBIT durchgeführt; Φ−1 ist Default). Die PROBIT-Prozedur berechnet maximum-likelihood Schätzer der Parameter b und C der Probitgleichung. Dabei kommt ein modifizierter Newton-Raphson Algorithmus zum Einsatz. Für eine binäre Zielgröße Y lautet die Probitgleichung p = P(Y = 0) = C + (1 – C)F(x`b) F eine Verteilungsfunktion(normal, logistisch, Gompertz). x der Vektor der unabhängigen Variablen (Einflußgrößen). p die Reaktionswahrscheinlichkeit. C die natürliche (spontane) Reaktionsrate. Die Wahl der Verteilungsfunktion F (normal für das Probit-Modell, logistisch für das Logit-Modell und Gompertz für das Gompit-Modell). (Siehe auch Datei 'probit.doc' !!!). PROC_PROBIT_data=dname; CLASS_vres; MODEL_vres=vlog; BY_v1; OUTPUT_out=dneu; WEIGHT_v2; RUN; PUT zum Erzeugen einer Datenzeile in einem ASCI-File (in einem _null_-DataStep); DATA__null_; SET_dname; FILE_dneu; PUT_v1_a-b_v2_c-d_@k_(ve-vf)_(g*h.); der Inhalt von v1 wird auf die Position a bis b geschrieben, von v2 auf c bis d; die Variablen ve bis vf werden beginnend an Position k sukzessive jeweils mit der Länge h in den Datensatz geschrieben (wobei g = f-e+1); !! man achte auf den Punkt nach dem 'h' Æ Formatanweisung!! PUT_@a_v1_$charn._@b_‘09‘x_@c_v2_d.e; Struktur je Variable: Position_Variable_Format a, b, c geben Positionen in der Datenzeile an; v1 wird als Character mit n Zeichen ausgegeben; ‘09‘x bewirkt eine Tab-Trennung zwischen den Variablen und wird als ein Zeichen gezählt; v2 wird as Zahl mit max.d Zeichen und max. e Nachkommastellen ausgegeben. RUN; PUT für den Output im Outputfenster; ermöglicht eine genaue Plazierung des Qutputs von Variablenwerten oder Texten innerhalb einer Zeile; PUT_@a_var1_@b_"text"; beginnt mit der Ausgabe des Variablen wertes von var1 auf Position a, mit der Ausgabe von text auf Position b der gleichen Zeile. PUT_@a_"Zeile1"_/_@a_"Zeile2"; '/' bewirkt einen Zeilenwechsel Æ neue Zeile. PUT (Makro-Statement) erzeugt einen Output im log-Fenster. %PUT__all_; _all_ gibt alle zur Zeit definierten System- und Globalvariablen mit ihren Werten aus. %PUT__global_; _global_ gibt alle zur Zeit definierten Globalvariablen mit ihren Werten aus. RANK (Procedure) vergibt Ränge; um sich die Rangdaten anzusehen (oder weiterzuverwenden?) müssen die Daten in eine neue Dati geschrieben werden; PROC_RANK_data=dname_out=dneu; ersetzt die Werte von vname durch entVAR_vname; sprechende Rangdaten. RUN; PROC_RANK_data=dname_out=dneu; schreibt die Rangdaten zur Variable VAR_vname; vname in die zusätzliche Variable vneu. RANKS_vneu; RUN; RANKS schreibt Rangdaten (zu Werten die vorher mit VAR spezifiziert wurden: siehe PROC RANK) in eine neue Variable; RANKS_vneu; READ_ALL_INTO siehe IML (Procedure) REG führt einfache lineare oder multiple Regression durch; nur für metrisch intervallskalierte Variablen; der Output enthält die geschätzten Parameter und die Ablehnungswahrscheinlichkeiten für das verwendete Model und die einzelnen Parameter; mit BY kann eine Klassifizierungsvariable angegeben werden => für jede Klasse wird dann eine Regressionsanalyse durchgeführt.. PROC REG_data=dname; v2 ist die unabhängige, v1 die abhängige Variable; MODEL_v1_=_v2_/_selection=adjrsq; Selektion des besten Modells nach Gütemaß; hier nach dem adjustierten r². OUTPUT_out=dneu _predicted=vh1 Schätzwerte (y-Dach) für y-Werte (hier v1) _residual=vh2 berechnet Residuen _press=vh3 berechnet Steichungsresiduen _dffits=vh4; berechnet Maß für den Einfluß des einzelnen Wertes auf das Modell (z.B. Lage, Steigung der Reg.gerade) (siehe Sachregister). RUN; RENAME weist in einem DATA-Step einer Variablen einen neuen Namen zu RENAME_valt1=vneu1_valt2=vneu2; REPORT (Procedure) zur definierten Ausgabe von Einzelwerten in Tabellenform; PROC_REPORT_data=dname _headline fügt eine durchgezogene Linie unter den Spaltenüberschriften ein. _headskip fügt eine Leerzeile unter 'headline' ein. _missing missings werden als Werte behandelt _split='t' legt t alsTrennzeichen fest. _nowd; unterdrückt ein extra-Fenster für REPORT. COLUMN_v1_v2_v3; benennt die auszugebenden Variablen aus dname. BREAK_AFTER_v1; setzt verschiedene Trennungen, Zusammenfassungen in der Vertikalabfolge der Daten DEFINE_v1_/_order definiert das Spaltenlayout für die einzelnen Variablen; hier wird nach Größe der Einträge aufsteigend sortiert ausgegeben. _order=....; ermöglicht die Definition einer anderen Sortierung: =data --> es wird entsprechend des ersten Auftretens der Einträge in der in der Datei vorgegebenen Reihenfolge sortiert; = .... siehe SAS-help. RUN; RETAIN ermöglicht Variablenwerte vorheriger Schleifendurchläufe mit INPUT in DATASteps beizubehalten; vname erhält erst dann einen neuen Wert, wenn vname im weiteren Ablauf des Programms (z.B. dadurch das eine Bedingung wahr wird) erneut aufgerufen wird; ohne RETAIN werden alle Variablen zu Beginn jedes Schleifendurchlaufes auf leer gesetzt. RETAIN_vname_a; a ist ein Startwert; RUN führt die davor stehende Programmsequenz aus SCAN (Macro-Function) liest Text ein, der dann an der Stelle, wo das Macro aufgerufen wurde, ausgegeben wird; ACHTUNG: SCAN-Befehl darf nicht mit Semikolon enden (wahrscheinlich gilt das immer). %MACRO_mname; das Beispiel liest bei Macro-Aufruf das a-te Wort %SCAN(text,_a,_‘__‘) aus text ein, wobei die Worte hier durch __ (in %MEND; Hochkommas) getrennt sind; statt des Textes text kann auch eine Glabalvariable verwendet werden. SCATTER erzeugt 3-D-Scatterplot; siehe G3D. SELECT führt Wert-spezifisch (Werte einer definierten Variable) bestimmte Operationen aus; SELECT_(v1); wenn v1 den Wert wert1 annimmt, wird vh1=a WHEN_(wert1)_vh1=a; gesetzt; OTHERWISE; wenn über die WHEN-Statements nicht alle Ausprägungen (auch missing value !) von v1 angesprochen werden, muß OTHERWISE angegeben werden (hier kann auch eine Operation angegeben werden). END; SELECT_(v2); hier Beispiel für alphanumerische Variable v2; WHEN_('string1')_vh1=a; WHEN_('string2')_vh2='text1'; OTHERWISE; END; SELECT_(v1); WHEN_(wert1)_DO; vh1=a; vh2=b; END; WHEN_(wert2)_DO; vh3='text1'; hier müssen vh3 und vh5 als Stringvariablen vh4=c; definiert werden; END; OTHERWISE; END; SELECT (SQL-Befehl) bestimmt die Variablen, die aus einer Quelldatei in eine neue Datei eingelesen, bzw. im Output-Fenster ausgeben werden sollen; zum SELECT gehört mindestens der FROM-Befehl (=> SELECT-Routine); SELECT-Routinen können geschachtelt werden (siehe PROC SQL). SELECT_* übernimmt alle Variablen der Quelldatei. SELECT_v1,_v2,_v3 übernimmt nur bestimmte Variablen; SELECT_ *,_v1+v2_AS_vneu berechnet zusätzlich neue Variablen; SELECT_valt_AS_vneu neue Variablennamen zuordnen; SELECT_distinct_v1 selektiert die Zeilen so, daß nur unterschiedliche Einträge in der Spalte (Variable) v1 stehen. SELECT_v1,_"Text",_v2 zwischen v1 und v2 wird in einer extra Spalte Fließtext ("Text") ausgegeben SELECT_v1,_CASE_WHEN…. (siehe unter CASE), bedingte Ausführung (ähnlich wie IF...THEN…) SET bestimmt SAS-Data-Sets, mit dem ein neues Data-Set in einem DATA-Step erzeugt werden soll; mehrere Dateien werden untereinander angeordnet, wobei alle Variablen der Ausgangsdateien in der neuen Datei erscheinen; in dem betreffenden Data-Step werden die Datensätze zeilenweise eingelesen: SET liest eine Zeile aus dem Quelldatensatz ein, dann wird das folgende Programm bis zum RUN abgearbeitet, dann springt SAS wieder an den Anfang des Data-Steps und beginnt von vorn; so können dann auch zeilenweise Berechnungen mit den Daten durchgeführt werden; (!!! dabei werden die Variablen aus der Quelldatei immer erst beim eigentlichen SET mit neuen Werten belegt !!!). SET_dname; dname gibt Quelldatei an; SET_libname.dname; SET_dname1_dname2; die Beobachtungen von dname1 und dname2 werden untereinander angeordnet; SET_dname_point=a; wählt die a-te (a=ganzzahlig) Zeile (a-ter Datensatz) von dname aus (wichtig!!!: nach random access auf die Datenzeilen muß mit einem STOP;-Statement dname wieder geschlossen werden, sonst läuft SAS in eine Endlosschleife). SET_d1; (in einem DATA-Step) d2 besteht nur aus einer IF_(_N_=1)_THEN_SET_d2; Datenzeile; der erste Durchlauf der DATA-Schleife liest die erste Zeil von d2 ein und hängt diese an die erste von d1; bei folgenden Durchläufen behält SAS die Werte aus d2 und hängt sie an alle folgenden Zeilen von d1 an. Beispiel: DATA mydata.probe1; a=x+5; b+4; c+x; SET mydata.probe; z=y+1; w+3; RUN; das Data-Set probe1 mit den Variablen x und y existiert bereits; a bleibt in der 1.Zeile leer, da hier (1.Schleife der DATAAnweisung) x noch nicht definiert ist; b wird von Anfang an hochgezählt: 1. Wert =4; bei c ist der 1.Wert=0, da x in der 1.Schleife noch leer ist; in der 2.Schleife wird dann der 1.x-Wert (aus der 1.Schleife) zum c-Wert hinzuaddiert und in der 2.Datenzeile ausgegeben. SHEWHART erstellt Diagramme, die Aussagen über die statistische „Kontrolle“ eines Prozesses ermöglichen; z.B. auch Boxplots; (siehe SAS-Hilfe Æ Graphics). SORT sortiert die Datensätze eines Data-Sets nach dem mit BY vorgegebenem Schlüssel PROC_SORT; BY_vname1_vname2; RUN; PROC_SORT; BY_DESCENDING_vname1; sortiert in absteigender Reihenfolge RUN; (default=aufsteigend) SPECTRA (Procedure) führt Spektralanalysen durch. PROC_SPECTRA_data=dname _out=dneu Ausgabe der betrachteten Frequenzen (als Kreisfrequenzen!; Umrechnung mit f=freq/(2*pi)) und Perioden in Datei dneu; . _p Ausgabe der Periodogrammwerte. _s Ausgabe der geglätteten Periodogrammwerte _adjmean führt eine Mittelwertbereinigung durch _whitetest; testet auf Vorliegen von White Noise mit der Bartlett's Kolmogorov-Smirnow-Statistik; gibt nur die Teststatistik aus: kritischer Wert muß per Hand berechnet werden. VAR_v1; Werte in v1 werden analysiert. WEIGHTS_a_b_c_d_c_b_a; gibt die Gewichte für die Glättung der Periodogrammwerte an; d (mittlerer Wert) gilt für den Zeitpunkt, für den die Glättung jeweils durchgeführt wird. RUN; SQL (Procedure) ermöglicht die Eingabe von SQL-Befehlen; die SQL-Befehlssequenz hat eine bestimmte Struktur (s.u.); das abschließende Semikolon kommt erst nach dem letzten SQL-Befehl; Variablen- und Dateinamen werden bei Listenschreibweise durch Komma voneinander getrennt; Achtung! es gibt ein Problem mit Globalvariablen in SQL innerhalb von Makros: durch die fehlenden Zeilenbegrenzungen in SQL kann SAS scheinbar der Variable nachfolgende Befehle und die Variable selbst nicht richtig interpretieren (siehe MACRO); problematisch sind ebenfalls mit %LET.. definierte TextMakrovariablen, deren Text durch Funktionen zusammengesetzt/erstellt wird; bei mit CALL SYMPUT.. erstellten Variablen scheint dies nicht aufzutreten. PROC_SQL; die Reihenfolge der Befehle ist festgelegt; CREATE_TABLE_dname1_AS die Befehle GROUP BY, WHERE, und SELECT_* HAVING und ORDER BY müssen nicht FROM_dname2 angeführt werden, können aber alle WHERE_(Bedingung) parallel verwendet werden; siehe auch die GROUP_BY_v1 Erklärungen zu den einzelnen Befehlen; HAVING_kng(Bedingung) HAVING wird mit Kenngrößen (kng) verORDER_BY_vname; wendet QUIT; PROC_SQL_feedback; SELECT_v1,_v2 FROM_tab1,_(SELECT...),_tab2 WHERE_v3>_ALL_(SELECT...) QUIT; feedback führt dazu, daß im log-Fenster ebenfalls die Syntax von verwendeten VIEW's angezeigt wird. SELECT-Routinen können geschachtelt werden und dann hinter FROM als Tabelle oder hinter WHERE als Vergleichswerte für die Bedingung verwendet werden. SUMMARY (Procedure) führt einfache beschreibende Statistiken durch und kann diese in Datei ausgeben; es können noch mehr statistische Kennzahlen ausgegeben werden (z.B. Kurtosis, Skewness, Konfidenzgrenzen, Prob. für Student.-T-Vtlg., etc), als unten angegeben. PROC_SUMMARY_data=dname; CLASS_v1; ermöglicht nach v1 zu gruppieren; VAR_v2; für v2 werden die Kennzahlen bestimmt. BY_v3; ermöglicht nach v3 zu gruppieren. FREQ_v6; ????? ID_v4_v5; ermöglicht zusätzliche Variablen in die Output-Datei zu schreiben. OUTPUT_out=dneu _n=Anzahl (ohne missings) _nmiss=mAnzahl Anzahl missings. _sum=Summe _mean=Mittelwert _std=Standardabweichung _var=Varianz _min=Minimum _max=Maximum _range=Range; RUN; STR (Macro) definiert einen festen, konstanten Text (String), der an der betreffenden Stelle des Makroaufrufes ausgegeben werden soll; so können z.B. Variablennamen per Globalvariable eingesetzt werden (siehe Beispiel 9). %LET_v1=%STR_(Text); beim Aufruf von &v1 wird dann Text eingefügt. %LET_v1=%STR_(*); beim Aufruf von &v1 wird ein * ingefügt; eignet sich zum Auskommentieren von Programmzeilen. SYMBOLa hiermit können Zusatzoptionen für die grafische Ausgabe der a-ten Kurve definiert werden; es muß aber als erstes die Farbe (c) definiert werden. SYMBOLa_c=colour Legt die Farbe fest. v=dot Werte werden als Punkte dargestellt. i=.....; legt Interpolationform fest; i=join verbindet die Punkte nur; bei i=rl wird eine lineare, bei i=rq eine quadratische, bei i=rc kubische Regressionsanalyse durchgeführt: die zugehörige Geradengleichung wird im Log-Fenster ausgegeben; zusätzlich können cl für Konfidenzgrenzen, m für mean angegeben werden; i=box, i=boxt für Boxplots (wird dann mit PLOT ausgeführt). SYMBOLa_i=r... führt Regression durch, aber nur für die Punkte, die in dem durch die Achsen begrenzten Wertebe-reich liegen; ..l = lineare; ...q = quadratische; ...c = kubische; ..._0 = Regressionskurve geht durch den Ursprung; ..._clm = 95%Konfidenzintervall (KI); ..._clizahl = KI für Einzelwerte mit zahl zwischen 50 und 99 %. _i=join verbindet aufeinanderfolgende Punkte durch eine Gerade _i=spline legt eine Kurve durch alle Punkte. _i=splines wie spline, ordnet die Werte aber vor dem Plotten nach der unabhängigen Variable. _i=splinep; spezifiziert eine parametrische Spline-Methode SYMPUT siehe CALL SYPUT; TABLE erzeugt Tabellen in PROC TABULATE; es sind drei Gliederungsebenen (jeweils durch Komma getrennt) möglich: Tabellen Zeilen, Spalten; es werden immer Angaben zu Zeilen und Spalten erwartet; die Differenzierung in verschiedenen Tabellen (v0: siehe unten) ist optional; die Ausgabenreihenfolge der einzelnen Gliederungsstufen ist aufsteigend numerisch oder alphabetisch sortiert (. für numerische und " " für string-Variablen gelten als kleinstes Zeichen; durch Anzahl der Leerzeichen am Anfang eines Strings kann also die Ausgabenreihenfolge beeinflußt werden!!). Es gibt spezifische Funktionen innnerhalb des TABLE-Statements: ALL erzeugt eine Zeile/Spalte 'gesamt' auf der jeweiligen Hierarchieebene n bewirkt die Ausgabe von Anzahlen pctn< > gibt Prozentzahlen aus, wobei zwischen < > definiert wird, über was prozentuiert wird (z.B. bei Spaltenprozenten, welche Zeilen zusammengefaßt werden sollen) TABLE_v0 verschiedene Tabellen differenziert nach v0 ,_ v1*v2 Strukturierung der Zeilen. ,_ v3 Strukturierung der Spalten. _/_rts=a legt die Breite der 1. Spalte fest. _indent=b die Gruppierungshierarchie der Zeilen wird durch Einrücken um b Zeichen und innerhalb einer Spalte dargestellt. _box="text" Definition des Textes für Tabellenzelle links oben. _condense; bewirkt, daß möglichst viele komplette Tabellen auf eine Seite kommen. TABLE_v1*v2_ALL=‘Summe‘, v3*v4*(n_pctn<v1*v2_ALL>)*f=6.2; TABLE (SQL-Befehl) erzeugt Tabellen (abgespeichert) und definiert deren Aufbau bzw. die Attribute der einzelnen Spalten (Attribute: siehe Skript S.22). CREATE_TABLE_tname_(sp1_Attribut_LABEL=sp1name, sp2_Attribut_INFORMAT=def1_FORMAT=def2); definiert eine neue Tabelle (ohne jegliche Einträge); Attribut definiert Text-, Zahlen- und Datumfelder (Anzahl Stellen, Nachkommastellen, (Grammatik)); nach INFORMAT= kann eine Eingabemaske, nach FORMAT= ein Ausgabeformat definiert werden, die sich voneinander unterscheiden können; mit LABEL kann eine von sp1 abweichende Spaltenüberschrift für die Ausgabe angegeben werden. CREATE_TABLE_dname_AS_ erzeugt SAS-Dataset und speichert dieses unter dname; (anschließend an diese Zeile kommt die normale Befehlsfolge mit SELECT, ....) ALTER_TABLE_tab1_MODIFY_sp1_Attribut; modifiziert ein Attribut der Spalte sp1 ALTER_TABLE_tab1_ADD_spneu_Attribut; fügt zu einer bestehenden Tabelle die Spalte spneu hinzu. ALTER_TABLE_tab1_DROP_sp1; löscht die Spalte sp1 aus der bestehenden Tabelle tab1. TABLES erzeugt Tabellen, auch Häufigkeitstabellen; in PROC FREQ; TABLES_vname_ /out=dname; erzeugt Häufigkeitstabelle zu den Klassen in vname (wie nominal skaliert); Ergebnis kann als SAS-Data-Set abgespeichert werden. TABLES_vzeile*vspalte; erzeugt Tabelle; vertikale Klassen (bzw. Zeilenbezeichnungen) stehen in vzeile, horizontale Klassen (bzw.Spaltenüberschriften) in vspalte; berechnet Randsummen; Variable mit Häufigkeitswerten wird mit WEIGHT angegeben. TABLES_vz*vs_/_expected _deviation _cellchi2 _chisq _nocol _norow _nopercent _nocum _nofreq _list _missprint _missing _measures; _cmh _trend _exact _agree _relrisk schreibt in die Zellen (bei gegebenen Randhäufigkeiten) die bei Unabhängigkeit von vz und vs erwarteten Häufigkeiten. Differenz zwischen beobachteter und erwarteter Häufigkeit. berechnet das Zellen-Chi². berechnet den Chi²-Test auf Unabhängigkeit, Likelihood Chi²-Teststatistik, Mantel-HaenszelChi²-Teststatistik, Fisher's Exakten Test. keine prozentualen Häufigkeiten für Spalten. keine prozentualen Häufigkeiten für Zeilen. keine prozentualen Häufigkeiten für Zellen. keine kumulierten absoluten und relativen Häufigkeiten in eindimensionalen Häufigkeitstabellen. keine absoluten Häufigkeiten in zweidimensionalen Kontingenztafeln. druckt die Kontingenztafel im Listenformat fehlende Werte werden in der Kontingenztafel mit '.' aufgeführt; bei der Berechnung aller Prozentangaben gehen sie nicht mit ein. wie missprint aber zusätzlich werden fehlende Werte bei Berechnung aller Prozentangaben mit einbezogen. liefert verschiedene Assoziationsmaße 1.) ruft Mantel-Haenszel-Chi²-Test als „Nonzero Correlation“ in Tabelle Cochran-Mantel-Haenszel Statistics 2.) ruft Cochran-Mantel-Haenszel-Teststatistik auf als „Row Mean Score Differ“ in Tabelle Cochran-Mantel-Haenszel Statistics; ordinales Merkmal (muß) über die Spalten der Kontingenztafel differenziert werden; im MODEL-Statement: vspalte. 3.) ruft für Spezialfall 3-dimensionale Kontingenztafel Mantel-Haenszel-Methodik auf, um mehrere Chi²-Teststatistiken von 2-dimensionalen KT zusammenzubetrachten (s.o.)--> Common Odds Ratio. ruft den Cochran-Armitage-Test auf ruft exakte Teststatistiken auf 1.) ruft bei Vierfeldertafeln die Mc-NemarTeststatistik und Kappa-Koeffizient 2.) ruft bei quadratischen s*s-Kontingenztafeln die Bowker-Teststatistik, 'Simple Kappa' und 'Weighted Kappa' auf. nur für Vierfeldertafel: berechnet odds ratio (OR; im Output unter 'Case Control' angegeben) und relatives Risiko (RR; getrennt für die Spalten) und deren Konfidenzintervalle; Faktoren so anordnen, daß Zeilenhäufigkeiten festgelegt sind _riskdiff _alpha=a TABLES_v1*v2*v3_/_cmh; (bei Fall-Kontroll- und Kohorten-Studien jeweils andersherum); SAS betrachtet die Tafel so, als ob die Exponierten in der ersten Zeile stehen! nur für 2x2-Tafel; bestimmt relative Risiken (oder binomiale Anteile) für Spalte 1 und 2, Differenz der Risiken und ihre Konfidenzgrenzen (die KI-grenzen der Differenz können als einseitiger Test bei Vorgabe eines anteiligen, in % angegebenen Grenzwertes für die Abweichung verwendet werden; Gruppen auf die Zeilen verteilt). für die KI bei relrisk kann die KI-Größe ((1-a) *100%) vorgegeben werden. führt Chi²-Tests für v2 und v3 durch und kontrolliert dabei für verschiedenen Werte von v1. TABULATE (Procedure) erzeugt Tabellen mit absoluten und relativen Anzahlen zu verschiedenen Kombinationen kategorialer Merkmale; hierarchisch verknüpfte Variablen werden im TABLE-Statement mit einem * verknüpft: jede Kategorie der übergeordneten Vaiable wird dann nochmals in die Kategorien der untergeordneten aufgeteilt; nicht-hierarchisch verknüpfte Variablen/Zeilen/Spalten werden durch ein Leerzeichen getrennt; mit ...=‘name‘ werden Bezeichnungen für die Spalten/Zeilen vergeben; mit f=... werden Formate zugeteilt PROC_TABULATE_data=dname _missing missings werden mit einbezogen. _format=a.b; legt Format der Einträge und Breite der 2. bis nten Spalte fest. CLASS_v1_v2_v3_v4; Klassifizierungsvariablen. TABLE_v1*v2 Æ hierarchische Zeilenaufteilung: für jede Kategorie von v1 gibt es die Unterteilung zu den Werten von v2. ,_ Komma trennt die Strukturanweisungen für Zeilen und Spalten v3*v4; Æ hierarchische Spaltenenaufteilung: für jede Kategorie von v3 gibt es die Unterteilung zu den Werten von v4. RUN; PROC_TABULATE_data=dname; CLASS_v1_v2_v3_v4; TABLE_v1*v2_ALL=‘Summe‘ ,_ v3*v4 *(n_pctn<v1*v2>=‘%‘)*f=a.b; es werden je v3*v4-Kategorie eine Spalte für n und eine für % ausgegeben; zwischen den <> wird angegeben, über welche Zeilen vertikal, bzw. über welche Spalten horizontal prozentuiert wird. RUN; TITLE ermöglicht die Eingabe von Titelzeilen für die Ausgabe im Out-Fenster; der Text muß in Hochkommas gesetzt werden; nur wenn der Text in doppelten Hochkommas steht, werden im Text angegebene Global-/Makrovariablen durch die entsprechenden Werte ersetzt. TITLEa_'Text'; Text steht als a-te Titelzeile im Output TITLE_"Der Startwert ist seed=&vg"; & kennzeichnet Global-/Makrovariable TITLE_"#byval1 Text"; #byval1 liest den aktuellen Wert einer im BY-Statement bearbeiteten Variable ein. TRANSPOSE (Procedure) transponiert SAS-Datasets; mit BY lassen sich hierarchisch aufgebaute Tabellen umstrukturieren (siehe Beispiel 8: in SAS ablaufen lassen und zugehörigen Output ansehen!). PROC_TRANSPOSE_data=dalt _out=dneu; VAR_v3_v4_v5; gibt an, welche Spalten transponiert werden BY_v1_v2; v1 und v2 werden als Klassifizierungsvariablen beibehalten; (siehe Beispiel 8). ID_v4; gibt an, aus welcher Spalte alt die Bezeichnungen für die neuen Spalten genommen werden sollen. RUN; TREE (Procedure) zeichnet Dendogramme; mit der Procedure CLUSTER wird zunächst eine Clusteranalyse durchgeführt und die entsprechende Grafikinformationen für ein Dendogramm mit der Option "outtree" in eine neue Datei ausgegeben; diese Datei wird dann in PROC TREE eingelesen (=dname) und damit das Dendogramm erzeugt. PROC_TREE_data=dname dname wurde in PROC CLUSTER mit der Option outtree erzeugt. _graphics zeichnet das Dendogramm; ohne wird Pixelgrafik erzeugt. _horizontal horizontales Dendogramm. _spaces=b erzeugt b Leerzeichen zwischen den einzelnen Objekten im Ausdruck. _out=dhneu für jede Beobachtung wird hier die Clusterzugehörigkeit mit ausgegeben (Option level oder ncluster muß angegeben werden). _nclusters=a das Dendogramm soll in a Cluster zerlegt werden. _level=b; legt das Ähnlichkeitslevel b (bezieht sich vom Wert auf die vertikale Dendogrammachse) fest, ab dem eine Unterteilung in getrennte Cluster erfolgen soll. NAME_v1; v1 benennt/identifiziert die einzelnen Beobachtungen (kann fehlen). COPY_v5_v6; v5, v6 werden mitgeführt (z.B. bei out). RUN; TTEST (Procedure) führt einen Zweistichproben T-Test auf Gleichheit der Mittelwerte durch; zusätzlich ein F-Test auf Varianzgleichheit (Varianzquotiententest) sowie einen Welch-Test auf Gleichheit der Mittelwerte, dessen Teststatistik bei Ungleichheit der Varianzen verwendet werden kann; die Daten beider Stichproben müssen in einer Variable (in einer Spalte) untereinander stehen; PROC_TTEST_data=dname; CLASS vklass; nach vklass werden die Werte der zwei StichVAR vname; proben unterschieden RUN; UNION (SQL-Befehl) gibt die Zeilen verschiedener Tabellen untereinander aus; es können (beliebig) viele Tabellen in dieser Form verknüpft werden. Achtung: Fehler traten bei einer UNION-„Kette“ auf, wo die einzelnen SELECTAbfragen noch Funktionen (Æ count...), GROUP BY enthielten und jeweils die gleichen Variablen erzeugten; die SELECT-Abfragen einzeln ergaben zusammen mehr Datensätze als in der mit UNION zusammengesetzten Datei (siehe Beispiel 7). SELECT_*_FROM_t1_ setzt die 1.Spalte aus t2 unter die 1.Spalte von t1; UNION_ dabei werden primär die Spaltenbez. von t1 überSELECT_*_FROM_t2; nommen; fehlende Einträge werden durch missing values aufgefüllt. SELECT_*_FROM_t1_ hier werden nur die Spalten von t1 und t2 untereinUNION_CORR_ ander gesetzt, deren Bezeichnungen in t1 und t2 SELECT_*_FROM_t2; übereinstimmen; die übrigen Spalten werden nicht ausgegeben. SELECT_*_FROM_t1_ hier werden nur die Spalten von t1 und t2 untereinOUTER_UNION_ ander und hintereinander gesetzt; es erfolgt keine SELECT_*_FROM_t2; Zusammenführung von Spalten; fehlende Einträge werden durch missing values aufgefüllt. SELECT_*_FROM_t1_ wie oben, aber gleichlautende Spalten von t1 und t2 OUTER_UNION_CORR_ werden zusammengeführt; fehlende Einträge werden SELECT_*_FROM_t2; durch missing values aufgefüllt. UNIQUE (SQL-Befehl) siehe INDEX. UNIVARIATE (Procedure) berechnet deskriptive Statistiken für univariate Stichproben. S.42; S.62. berechnet auch Einstichproben T-Test für H0:µ=0 (für andere Mittelwerte muß dieser vor dem Test von den Daten abgezogen werden); berechnet Test auf Normalverteilung (mit beliebigem µ und sigma²), bei n<=2000 Shapiro-Wilk-Test (Testgröße W: Normalverteilngsannahme beibehalten, wenn Pr<W größer als 0.1 ist), bei n>2000 KolmogorovSmirnov-Test (Testgröße D); PROC_UNIVARIATE_data=dname_normal_normal_plot; die Option normal führt einen Test auf Normalverteilung für die unter VAR definierte Variable durch; die Option normal plot erzeugt Stem-Leaf- Diagramm, Boxplot, NormalProbability-Plot; BY_vclass; mit BY_vclass kann die Berechnung der VAR_vname; statistischen Kennzahlen getrennt für die verschiedenen Klassen von vname durchgeführt werden; OUTPUT_out=dneu mit OUTPUT kann die Ausgabe in eine _ n=anzahl Datei (out=...) erzeugt, die Anzahl der Kenn- _min=minimum zahlen begrenzt und deren Bezeichnung _mean=mittelwert festgelegt werden. _max=maximum _var=varianz _median=median _mode=modalwert _pctlpts=a a-tes Percentil (a in %, zwischen 1 und 100). ....=a_TO_b_BY_c gibt mit Schrittweite c die Percentile von a bis b aus. _pctlpre=text; text wird als Präfix im Variablennamen für die Percentile verwendet. RUN; UPDATE (SQL-Befehl) verändert die Werte einzelner Spalten in einer bestehenden Tabelle; mit CASE kann die veränderung differenziert und an Bedingungen geknüpft werden UPDATE_tname_SET_v1=v1+a; USE siehe IML (Procedure) VALIDATE (SQL-Befehl) ermöglicht innerhalb der PROC SQL die Überprüfung der Syntax von SQL-Befehlen, ohne daß diese ausgeführt werden. VALIDATE_SELECT_....._FROM_...: VALUE definiert Wert- bzw. String-Zuweisungen (im Austausch) unter einem FormatNamen (Formatnamen dürfen nicht mit Zahlen enden); dies Format kann dann mit diesem Namen Variablen zugewiesen werden (siehe Statement FORMAT); wird in PROC FORMAT verwendet; Variablenwerte, die in der VALUE-Zeile nicht berücksichtigt werden, werden unverändert ausgegeben. VALUE_fname1_wert1='string1' Format für numerische einzelne Werte. _wert2='string2'; VALUE_&fname_text1='string1' Format für alphanumerische einzelne strings; _text2='string2'; die Länge von string bestimmt später das Ausgabeformat für die Textvariable. VALUE_fn_wert1,_wert2,_wert3='string1'; Liste von Werten. VALUE_fn_wert1-wert2='string1'; Bereich von Werten (Bereiche dürfen sich nicht überschneiden !!). VALUE_fn_wert1<-wert2='text'; Bereich ohne den Grenzwert wert1. VALUE_fn_LOW-wert1='klein' der Bereich reicht vom kleinsten vorhandenen Wert (ohne missing !!) bis wert1. _wert1='string1' _OTHER='string2' betrifft alle sonst nicht berücksichtigten Werte (auch missings !!). _wert3-HIGH='groß'; der Bereich reicht von wert3 bis zum größten vorhandenen Wert. VIEW (SQL-Befehl) erzeugt virtuelle Tabellen, die nicht mit ihren Werten abgespeichert wird, wohl aber die Anweisung zur Erstellung dieser Tabelle (Dateikennung: *.sv2); diese virtuelle Tabelle wird in späteren SQL-Sitzungen durch Aufruf der Datei *.sv2 (ganz normal als Tabelle mit FROM libname.viewname ansprechen) neu erzeugt und verwendet. CREATE_VIEW_viewname_AS_Abfrage Abfrage entspricht einem SELECT-Befehl WEIGHT kann die Variable mit den Werten für die einzelnen Zellen einer Tabelle festlegen; in PROC FREQ; ermöglicht die Erstellung von Kontingenztafeln mit absoluten Häufigkeiten als Rohdaten. WEIGHT_vname; vname enthält die absoluten Häufigkeiten. WHERE ermöglicht beim zeilenweisen Abarbeiten einer Datendatei Beschränkungen auf nur bestimmte Zeilen (Datensätze); wenn die Bedingung war ist, wird der Datensatz verwendet. WHERE_v1=wert_OR_v2='strin1'; WHERE (SQL-Befehl) hiermit können zeilenweise Daten ausgewählt werden, die eine bestimmte Bedingung erfüllen (siehe auch HAVING); diese Restriktion gilt auch für alle weiteren Befehle der selben SELECT-Routine; kann sich aber nur auf Variablen beziehen, die in den unter FROM bestimmten Tabellen bereits vorhanden sind, nicht die, die mit AS neu definiert wurden. WHERE_(Bedingung) Bedingung enthält logische/mathematische Verknüpfungen von Variablen und Berechnungen; WHERE_d1.v1=d2.v2 um Datensätze aus verschiedenen Dateien (d1, d2) gezielt miteinander zu verknüpfen, müssen hier die beiden Schlüsselvariablen (v1, v2) definiert werden WHERE_v1<_ALL_(SELECT....) (siehe ALL und SELECT) WHERE_v1_IN_(a,_b) WHERE_v1_BETWEEN_a_AND_b Allgemeine Optionen: NOPRINT unterbindet den zu einer Procedure gehörenden Output in Output-Fenster; wird in der PROC-Zeile verwendet. PROC_UNIVARIATE_data=dname_NOPRINT; NOSORT unterbindet Sortierung in der Ausgabe Mathematische Funktionen und Operatoren: Achtung: sollte bei einer mit Operatoren (+, -, *, /) erstellten Berechnungs-Formel einer der angesprochenen Terme/Variablen ein missing haben, so wird auch das Gesamtergebnis der Formel auf missing gesetzt! + - Addition Subtraktion * / Multiplikation Division log(a) 1Ea berechnet den natürlichen Logarithmus von a Faktor: 10a (Anzahl der Nullen = a); z.B.: 345 * 1E4 = 345E4 = 3450000. Logische Operatoren: AND, & OR AND NOT EQ, = ^= < > <= >= Sonstige Operatoren: || Aneinanderhängen von Zeichenketten. Funktionen (operieren in SAS nur !! zeilenweise, datensatzweise; in SQL anders): (Siehe auch Æ SAS System Help: Main Menu Æ SAS Language Æ SAS Functions Æ Function Categories _N_ liest die Beobachtungsnummer (Zeilennummer, OBS) in eine Variable ein vname=_N_; _LAST_ zeigt auf die zuletzt mit einem DATA-Step erzeugte Datei PROC_...._data=_LAST_; arcos arcuscosinus, Umkehrfunktion der Cosinusfunktion var=arcos(wert); arsin arcussinus, Umkehrfunktion der Sinusfunktion var=arsin(wert); atan arcustangens, Umkehrfunktion der Tangensfunktion avg (SQL-Befehl) gibt den Mittelwert zurück; avg(var1)_AS_mittel cdf (siehe auch pdf) gibt Werte von Verteilungsfunktionen zurück; kann für verschiedene Verteilungen verwendet werden; var = cdf('Verteilungstyp',<parameter1>,<parameter2>,<…>); var = cdf('normal'); var = cdf('binomial',a,p,n); a=Anzahl Erfolge, p=Erfolgswahrscheinlichkeit, n=Anzahl Versuche ceil kleinster ganzzahliger Wert >= Argument (a) vname_=_ceil_(a); cinv(a,b) gibt Werte zum a Quantil für die Chi²-Verteilung mit b Freiheitsgraden aus; kann zur Berechnung des kritischen Werts für Chi²-Test verwendet werden. vname=cinv(a,b); compbl entfernt doppelte blanks aus einem string (z.B. wenn die Ziffern einer Zahl bündig an einen Text angehängt werden sollen. vneu=compbl(vstring); vneu=left('text'||compbl(vzahl)); cos var=cos(wert); dim gibt die Anzahl der Variablen eines Variablenarrays zurück. vanz=dim(varray); exp exponiert zur Basis e vname=exp(a); a kann Zahl oder numerische Variable sein. finv(a,b) gibt Werte zum a Quantil für die F-Verteilung mit b bzw. c Freiheitsgraden aus; kann zur Berechnung des kritischen Werts für F-Test verwendet werden. vname=finv(a,b,c); floor größter ganzzahliger Wert <= Argument (a) vname_=_floor_(a); input 3.) zur Konvertierung von Text-Zahlen in numerische Zahlen v1=input(trim(left(textzahl)),a.b); wandelt eine String-Zahl in eine numerische Zahl um. lag wird in DATA-Steps verwendet; behält bzw. listet Werte vorheriger Schleifendurchläufe des DATA-Steps; var2=laga(var1); die Funktion übergibt an var2 bis einschließlich zum a-ten Schleifendurchlauf missing value; in den folgenden Schleifen s (mit s>=a+1) wird der Wert des Schleifendurchlaufs s-a an var2 übergeben. left setzt den String linksbündig. vneu=left(valt); (siehe auch right, center). left (SQL-Funktion) log bildet den Logarithmus zur Basis e. loga bildet den Logarithmus zur Basis a, wobei irgendeine ganze Zahl ist. max gibt aus einer Auswahl von Werten den größten an (Maximum) (Syntax siehe MIN) mdy gibt einen SAS-Datums-Wert zurück, der mit den numerischen Variablen v_monat, v_tag und v_jahr vorgegeben wird; Achtung: die Jahresangabe in v_jahr kann zweistellig (ohne 19-hundert) oder vierstellig angegeben werden (auch gemischt); aber bei Jahr-2000-Übergängen erfolgt die Umsetzung ins SAS-Datum nur dann korrekt, wenn vierstellig angegeben wird v_datum=mdy(v_monat,_v_tag,_v_jahr); mean bildet den arithmietischen Mittelwert einer Gruppe von Variablen(werten) (Syntax siehe MIN) min gibt aus einer Auswahl von Werten den kleinsten an (Minimum) Syntax und zugehörige Erklärungen gelten sinngemäß auch für andere Funktionen! hier wird das Funktionsergebnis auch dann gebildet, wenn eine der Variablen leer (missing value) ist; das Funktionsergebnis wird immer nur zeilenweise gebildet (anders bei SQL-Funktionen). vname_=_min_(v1, _v2, _v3); mit einer Liste von Variablen(werten). vname_=_min_(OF_va-vb); mit einem (Variablen)array: dann muß OF verwendet werden. mod Modulo-Funktion; gibt den Rest zurück, der beim Teilen einer Zahl durch eine andere übrig bleibt. vneu=mod(zahl1,_zahl2); ergibt den Rest bei Teilung von zahl1 durch zahl2. vneu=mod(v1,_1); ergibt die Nachkommastellen von v1. n gibt die Anzahl der "nicht-missing"-Einträge aus einer Liste von Variablen zurück; var=n(v1,_v2,_v3); möglicher Wertebereich für var: 0<=var<=3. %nrquote (Macro quoting function) the %NRQUOTE function (see also %QUOTE) masks a character string during compilation of a macro or macro language statement. Additional to those mentioned for %QUOTE it also masks: & % %nrstr (Macro quoting function) the %NRSTR function (see also %STR) masks a character string during compilation of a macro or macro language statement. Additional to those mentioned for %STR it also masks: & % Eingebundene Makrovariabeln, die bei Ausführung des Strings umgesetzt werden sollen, müssen in die Funktion RESOLVE(‘&makrovar.‘) oder SYMGET(‘makrovar‘) eingebunden werden: ACHTUNG, wenn diese Makrovariabeln wiederum Variabelnamen als Wert entahlten, so werden diese nicht als solche erkannt und nicht umgegesetzt sondern sie werden wie Text behandelt. pdf (siehe auch cdf) gibt Werte von Dichtefunktionen zurück; kann für verschiedene Verteilungen verwendet werden; poisson Verteilungsfunktion der Poisson-Verteilung mit den Parametern lambda. f_=_poisson_(lambda,x); entspricht probnorm probbnml Verteilungsfunktion der Binomialverteilung X~B(n,p) f_=_probbnml_(p,n,x) entspricht probnorm probchi Verteilungsfunktion der Chi²-Verteilung mit FG Freiheitsgraden f_=_probchi_(x,FG); entspricht probnorm probit gibt Quantile der Standard-Normalverteilung aus; x=probit_(a) gibt das (a*100)%-Quantil an x zurück; mit a zwischen 0 und 1. probnorm Verteilungsfunktion der Standardnormalverteilung f_=_probnorm_(x); übergibt an f die Wahrscheinlichkeit, daß eine standardnormalverteilte ZV einen Wert kleiner gleich x annimmt. probt put %quote Verteilungsfunktion der t-Verteilung mit FG Freiheitsgraden f_=_probt_(x,FG); entspricht probnorm 1.) für die Zuweisung von Werten/Einträgen für (String)Variablen bei gleichzeitiger Formatänderung (der einzelnen Komponenten); 2.) kann zur Konstruktion von Variablennamen verwendet werden, wenn durch die Syntax eindeutig vorgegeben wird, daß es sich um einen Variablennamen handelt (z.B. ein Argument in einer Funktion) und nicht um einen Variableneintrag. var1=put(var2,_format.); beim Eintrag in var1 werden die Werte von var2 mit dem Format format umgesetzt. var1=put(var2,_za.0); das 'z' im Format 'za.0' (a ist eine Zahl) bewirkt, daß fehlende Zeichen durch Nullen ergänzt werden. v1="text"||put(v2,_format.); v1='text'||put(trim(left(v2)),a.b); fügt eine Zahl mit dem Format a.b als String an text linksbündig an. v1='text'||trim(left(v2)); fügt eine Zahl als String an text linksbündig an. (Macro quoting function) the %QUOTE function (see also %NRQUOTE, %STR, %NRSTR) masks a character string during compilation of a macro or macro language statement. It masks the following special characters and mnemonic operators: + - * / < > = ¬ ^ ~ ; , blank AND OR NOT EQ NE LE LT GE GT It also masks the following characters when they occur in pairs and when they are not matched and are marked by a preceding % : '"() RANBIN Realisierung einer binomialverteilten Zufallsvariable vname_=_RANBIN_ (seed,n,p); seed ist ein notwendiger Startwert für die Zufallszahlenreihe; bei seed=0 übernimmt SAS die Systemzeit; n entspricht der Anzahl der betrachteten Bernoulli-Experimente; p gibt die Erfolgswahrscheinlichkeit für das einzelne Bernoulli-Experiment an. RANEXP Realisierung einer exponentialverteilten Zufallsvariable mit λ=1 vname_=_RANEXP_ (seed) seed ist ein notwendiger Startwert für die Zufallszahlenreihe; bei seed=0 übernimmt SAS die Systemzeit. RANNOR Realisierung einer standardnormalverteilten Zufallsvariable mit N(0,1) vname_=_RANNOR_ (seed); seed: siehe RANEXP RANPOI Realisierung einer poissonverteilten Zufallsvariable mit dem Parameter λ vname_=_RANPOI_ (seed, _lambda); seed: siehe RANEXP RANUNI Realisierung einer gleichmäßig verteilten Zufallsvariable zwischen [0,1] vname_=_RANUNI_(seed); seed: siehe RANEXP repeat setzt einen Text mehrfach in einen String ein; string=repeat("text",_a); text wird a-mal hntereinander in string eingefügt. DO_i=1_TO_b; string=repeat("text",_i); END; round Rundung des Arguments (a) vname_=_round_(a); sin var=sin(wert); sqrt Quadratwurzel var=sqrt(wert); %str (Macro quoting function) the %STR function (see also %NRSTR) masks a character string during compilation of a macro or macro language statement. Funktioniert wie %QUOTE: weitere Erklärungen siehe dort. Zu maskierende Makrovariabeln können in die Funktion SYMGET(‘...‘) eingebunden werden; hier entfällt das & für den Makrovariabelnamen. CAUTION: Do not use %STR to enclose other macro functions or macro invocations that have a list of parameter values. Because %STR masks parentheses without a match, the macro processor does not recognize the arguments of a function or the parameter values of a macro invocation. substr gibt einen substring (= Teilstring) einer Zeichenkette zurück. vneu=substr(valt,_a,_b); an vneu wird ein substring von valt übergeben, der beim a-ten Zeichen von valt beginnt und b Zeichen lang ist. substr (SQL-Funktion) gibt einen substring (= Teilstring) einer Zeichenkette zurück. SELECT_substr(v1,_a,_b) der substring beginnt beim a-ten Zeichen von v1 und ist b Zeichen lang. sum bildet die Summe aus einer Gruppe von Variablen(werten): zeilenweise ! (Syntax siehe MIN) sum (SQL-Funktion) bildet Summen spaltenweise, wenn das Argument nur aus einer Variable besteht, wenn mehrere Variablen aufgelistet werden, wird nur zeilenweise addiert; das Funktionsergebnis ignoriert bei der Addition missings. SELECT_sum(Argument)_AS_vneu SELECT_sum(var)_AS_vneu spaltenweise für var. SELECT_sum(v1, v2, v3)_AS_vneu zeilenweise über v1, v2, v3. symget übergibt den aktuellen Wert einer Makrovariable var=symget ( ‘macrovarname‘ ); %LET_mvar2=%str(symget(‘mvar1‘)); mit dieser Konstruktion wird verhindert, dass die Makrovariable mvar1 bereits in dieser Zeile durch einen ihr zugewiesenen Wert ersetzt wird. (siehe auch Beispiel 11) tan tangens, Tangensfunktion tinv(a,b) gibt Werte zum a Quantil für die Student-T-Verteilung mit b Freiheitsgraden aus; kann zur Berechnung des kritischen Werts für T-Test verwendet werden. vname=tinv(a,b); trim ermöglicht die Ausrichtung eines Wertes/Eintrags zu ändern??? (siehe auch put) upcase Abfrage; Ergebnis-Variable wird wahr (gibt eine 1 aus), wenn in Variable v2 der mit 'Eintrag' speziefierte Wert auftaucht. v1=upcase(v2)='Eintrag'; year gibt aus einer SAS-Datums-Angabe dasJahr zurück. vjahr=year(vdatum); Sachregister: Adjustierung bei multiplen paarweisen Tests Einstellung der Fehlerwahrscheinlichkeit auf α=0.05 für das gesamte Experiment. array diese Form der Angabe ist bei Variablen mit Zählindex möglich: also v1,_v2,_v3,_v4 (Listenform) ist gleichbedeutend mit v1-v4 (array-Form); mit arrays kann eine Auswertung in Zeilen (Datenzeilen) erreicht werden (siehe SAS-Functions). Assoziationskoeffizient (nach Yule) für Vierfeldertafel; beschreibt, ob eine Konzentrierung der Beobachtungen auf der 1. oder der 2. Diagonale oder eine Gleichverteilung vorliegt. balanciert balancierte Daten: alle Stichproben (oder Klassen oder Faktorstufenkombinationen) enthalten die gleiche Anzahl von Beobachtungen; in SAS werden Teststatistiken unter TYPE I ausgegeben; (bei ungleicher Anzahl werden die Daten unbalanciert genannt; in SAS Ausgabe unter TYPE III) Bestimmtheitsmaß (= R²); Gütemaß bei Regressionsanalysen; gibt an, welcher Anteil der Gesamtstreuung (SST) durch das Regressionsmodell erklärt wird; Wertebereich zwischen 0 und 1; bei einer einfachen linearen Regression ist R² die quadrierte Korrelation rxyzwischen x un y: R² = rxy² = SSM/SST; siehe auch Streuungszerlegung; Bindungen (= ties) bei Überlebenszeitanalysen; wenn zu einem Zeitpunkt mehr als ein Ereignis (= Todesfall) eintritt; muß in PROC PHREG auch bei Analyse gematchter Fall-Kontroll-Studien berücksichtigt werden (Bindungen treten dort dann auf, wenn mehr als ein Fall = Ereignis in einer gematchten Gruppe = Stratum vorliegt: Matching-Verhältnis m : n); Bowker-Teststatistik:( bei quadratischen s*s-Kontingenztafeln) testet auf Symmetrie (der absoluten Häufigkeiten) zur Hauptdiagonalen in der Kontingenztafel; überprüft, ob sich zwei abhängige Stichproben hinsichtlich der Verteilung einer nominalen (ordinal geht auch) Zielgröße unterscheiden. (Verallgemeinerung des Mc-Nemar-Tests); dabei werden die tatsächlichen Übereinstimmungen (die auf der Hauptdiagonalen liegen) nicht berücksichtigt, es wird also quasi auf Symmetrie (Gleichheit) der Abweichungungen von den Übereinstimmungen getestet; dieser Test macht z.B. dann Sinn, wenn zwei abhängige Stichproben miteinander verglichen werden sollen H0: 'es liegt Symmetrie zur Hauptdiagonalen vor' Boxplots (=Box and Whisker Plots) können mit SYMBOL_i=box und PLOT in PROC GPLOT erzeugt werden. Bravais-Pearson -> Maßkorrelation Chi²-Anpassungs-Test prüft auf Vorliegen einer bestimmten Verteilung (vollständig spezifiziert) oder einer Verteilungsfamilie (Verteilungstyp; unvollständig spezifiziert); bildet Differenzen zwischen theoretischer (bei gegebenen Randhäufigkeiten) und empirischer Häufigkeitsverteilung; bei metrischen Daten muß entsprechend klassiert werden; bei unvollständig spezifizierten Hypothesen werden zunächst die Parameter der (theoretischen) Verteilung geschätzt (--> andere Freiheitsgerade beachten) und dann die theoretischen Häufigkeiten bestimmt. Chigramm graphische Darstellung der nichtquadrierten Abweichungen zwischen empirischen und bei Unabhängigkeit der Merkmale erwarteten Zellbesetzungen (= Zell-Chi-Werte); aufgetragen gegen die Klassennummern. Chi²-Unabhängigkeits-Test in SAS: kann in PROC FREQ mit TABLES_v1*v2_/_chisq; aufgerufen werden; wenn die Erwartungswerte für die einzelnen Zellen (der Häufigkeitstabelle, der Kontingenztafel) kleiner/gleich 5 sind, ist dieser Test so nicht geeignet und es muß ein exakter Test mit der zusätzlichen Option _exact aufgerufen werden; das Ergebnis steht im Output unter „Fisher’s Exact Test“, wobei unter „left“ und „right“ Überschreitungswahrscheinlichkeiten für die entsprechenden einseitigen Tests, unter „2-tail“ die für den zweiseitigen Test (diesen verwenden) angegeben sind; bei kleinen Häufigkeitstabellen führt SAS den exakten Test automatisch durch. Cochran-Armitage-Test: dieser ist nur für 2*s-Tafeln definiert (dichotome und ordinale Variable); Frage nach einem gerichteten Zusammenhang (Trend); (SAS: -> TREND-Option in PROC FREQ mit TABLES-Statement; r*2-Tafeln werden auch korrekt bearbeitet) H0 'Gleichheit aller Spaltenprozente' bzw. 'es liegt kein Trend (Zunahme oder Abnahme der relativen Häufigkeiten über die Spalten) innerhalb einer Zeile vor' ; (p11/p•1=p12/p•2=....=p1s/p•s) gegen H1 'Monoton ansteigende oder fallende Spaltenprozente'; (p11/p•1>p12/p•2>....>p1s/p•s) oder (p11/p•1<p12/p•2<....<p1s/p•s) Cochran-Mantel-Haenszel-Test: testet auf Zusammenhang zwischen zwei Merkmalen, wobei ein Merkmal ordinal (muß über die Spalten der Kontinggenztafel differenziert werden; im MODEL-Statement: vspalte) und eins nominal (muß über die Zeilen differenziert werden; vzeile) skaliert sein muß. H0: 'k Zeilen haben alle die gleichen mittleren scores' bzw. ' µ1=µ2=...=µk' gegen H1 'mindestens für zwei µ (i,j) gilt µi ungleich µj' Common Odds Ratio wird mit der Cochran-Mantel-Haenszel-Methode für dreidimensionale, 2 x 2 x k - Kontingenztafeln bestimmt; dabei wird eine 2x2Tafel durch einen dritten Faktor stratifiziert; das Common Odds Ratio ist dann für diesen dritten Faktor adjustiert. Cox-Regression eine Form der Generalisierten Linearn Modellle; wird z.B. beim Proportional-Hazard-Modell verwendet; Datum (für Formate siehe oben unter FORMAT oder auch Æ SAS System Help Æ SAS-Language Æ Formats and Informats Æ Date, Time, and Datetime Formats) (in SQL) Datum-Angaben werden in SAS/SQL als Anzahl Tage bezogen auf ein Fix-Datum festgehalten; diese Werte werden aus abweichenden Eingabeformaten, bzw. für abweichende Ausgabeformate umgerechnet; dies bedeutet, wenn Datumwerte über den zugehörigen Variablennamen mit mathematischen Operationen angesprochen werden, erfolgt die Berechnung mit der Anzahl Tage. Beispiel: In einer Tabellenspalte gebdat ist das Geburtsdatum festgehalten: es soll jetzt die Differenz in Jahren zu einem best. Datum berechnet werden, hier 1. Januar 1998. Berechnung: ('01JAN98'd-gebdat)/365=differenz (Das d rechnet die datumangabe in Anzahl Tage um) DFFITS berechnet Maß für den Einfluß des einzelnen Wertes auf das Modell; Faustregel: ist der Wert >2 bzw. >2*Wurzel(p/n) mit P=Anzahl der Parameter und n=Anzahl der Beobachtungen, dann handelt es sich um einen Ausreißer bzw. eine auffällige Abweichung. FG = Freiheitsgrade. Fishers Exakter Test für Vierfeldertafel; testet die Unabhängigkeits- (und nur bei diesem Modell gleichzeitig die Homogenitätshypothese) im hypergeometrischen Modell; wird auch für andere Modelle (multinomial, produkt-binomial) genutzt, dann stimmt die Aussage aber nicht mehrexekt; da dieser Test konservativ auf nicht vorhandene Voraussetzungen reagiert, ist bleibt die positive Signifikanzaussage zumindest gesichert. H0: Faktor A und Faktor B sind stochastisch unabhängig. Functions SAS-Functions sind durch angehängte ( ) gekennzeichnet, die die Argumente enthalten, die an die Funktion übergeben werden; das Ergebnis der Funktion wird an eine Variable übergeben; z.B. erg=MIN_(x1,_x2,_x3,_x4) Argumente als Liste erg=MIN_(OF_x1-x4) Argumente als array Globalvariable: auch als Makrovariable bezeichnet; kann im DATA-Step mit CALL SYMPUT und außerhalb eines DATA-Steps mit %LET definiert werden; Aufruf der Variablen im nachfolgenden Programm mit &.... (Beispiel: Globalvariable wurde mit %LET_vg=123 definiert; Aufruf dann in z.B. PROC PLAN seed=&vg;); wenn in einem DATA-Step der Text-Inhalt einer G.-variable an eine andere Varaible übergeben werden soll, so muß die G.-variable in doppelten Hochkommas stehen; Ohne Hochkommas wird der Text -Inhalt der G.-variable als neue(r) Variable(nnamem) verwendet; in einem Dateiaufruf für ein SAS-Dataset kann in &v1 der Dateiname + Libname enthalten sein.) Durch einfaches Anhängen einer Globalvarable können neue Variablennamen konstruiert werden. Hazard-Modell Import Daten-Import; z.B. von EXCEL siehe Beispiel 5b. Kappa-Koeffizient: (Assoziationsmaß) Maßzahl für den Grad der Übereinstimmung zwischen den beiden Einstufungen zweier (abhängiger) Stichproben einer a) dichotom, bzw. b) mit s Kategorien erhobener Zielvariablen; 0 kennzeichnet Unabhängigkeit, 1 perfekte Übereinstimmung der beiden Einstufungen (nur sinnvoll mit Betrachtung des KI für Kappa). 'Simple Kap Kolmogorov-Smirnow-Test (in SAS) Test auf Normalverteilung bei beliebigem µ und sigma²; wird in der PROC UNIVARIATE bei Stichproben vom Umfang n>2000 verwendet; im Output wird die Teststatistik D und deren Überschreitungswahrscheinlich-keit Prob>D angegeben; H0 'es liegt Normalverteilung vor'. Algemein: testet auf Vorliegen einer bestimmten Verteilung (vollständig spezifiziert; es gibt Varianten für unvollständig spezifizierte Hypothesen); dazu werden empirische und theoretische Verteilungsfunktion miteinander verglichen. Kontingenzkoeffizient (nach Pearson) für r*s - Kontingenztafeln; bei gegebenen Randhäufigkeiten ist der Koeffizient =0 bei Unabhängigkeit und =1 bei maximaler Abhängigkeit; wird über den Chi²-Wert bestimmt, kann auch mit relativen Häufigkeiten berechnet werden; die absolute Höhe des Koeffizienten hängt von der Anzahl Spalten und Zeilen abe: um verschiedene Tafeln vergleichen zu können, muß der Koeffizient korrigiert werden! Kontraste beim Vergleich von Mittelwerten; es werden lineare Kontraste betrachtet: Grundlage sind Summenbeziehungen zwischen den betrachteten Mittelwerten, wobei auf einer Seite des Gleichheitszeichens die Null steht; der Kontrast wird dann durch die Vorfaktoren der einzelnen Summanden (jeder Summand besteht aus Vorfaktor und einem Mittelwert) definiert. Korrelation "typische" Korrelation = Maßkorrelation nach Bravais-Pearson. Korrelationsanalyse untersucht, ob überhaupt ein Zusammenhang zwischen (zwei) Variablen besteht, und bestimmt die Stärke des Zusammenhangs. Kovariable Merkmal, das in einem (Quasi-)Experiment weder abhängige noch unabhängige Variable ist, sondern nur miterhoben wird, um im Nachhinein prüfen zu können, ob es einen Einfluß auf das Untersuchungsergebnis hatte. Kovarianzanalyse Verfahren zur Überprüfung der Bedeutsamkeit einer Kovariablen für eine Untersuchung. Der Einfluß dieser Variablen wird neutralisiert; hat nichts mit Kovarianzen zu tun. Kreuzvalidierung (in der PROC DISCRIM mit der Option crossvalidate; -> Diskriminanzanalyse) n-1 der Beobachtungen werden als Lernstichprobe verwendet um eine Zuordnungsvorschrift für die vorgegebenen Klassen zu bestimmen; die verbleibende Beobachtung wird dann mit dieser Vorschrift einer Klasse zugeordnet; dies wird für jede Beobachtung durchgeführt; Fehlklassifikationen werden gekennzeichnet bzw. gelistet. Kruskal-Wallis-Test Link-Funktion Logistische Regression modelliert (Erkrankungs-)Wahrscheinlichkeiten; gehört zur Gruppe der Verallgemeinerten (Generalisierten) Linearen Modelle; LinkFunktion ist die Logit-Funktion; die Zielvariable Y ist dichotom skaliert, kann nur die Werte 0 und 1 annehmen; die Einflußgrößen (werden alle Kovariablen genannt) können beliebig skaliert sein; kann nur Odds-Ratios schätzen, keine (adjustierten) Relative Risks; bei stetigen Einflußvariablen muß die OR anders interpretiert werden: die OR gibt hier den Faktor für die Änderung des Chancenverhält-nisses bei Änderung der Einflußvariable um eine Einheit die logistische Regression arbeitet nicht nach dem Kleinste-Quadrate-Prinzip, sondern nach dem Maximum-Likelihood-Prinzip: dieser Schätzer ist nur asymptotisch erwartungstreu: niedrige Zellbesetzungen bei den Faktorkombinationen wirken sich sehr nachteilig auf die Asymptotik aus. Im SAS-Output (PROC LOGISTIC) wird die Güte des Modells unter "ChiSquare of Covariates" angegeben: getestete H0 'das Modell paßt perfekt; die im Modell geschätzten Werte stimmen mit den beobachteten alle exakt überein'. In PROC GENMOD können zufällige und fixe Einflußfaktoren unterschieden werden. major siehe tickmarks. Mantel-Haenszel-Test (auch Cochran-Mantel-Haenszel-Test): spezielle Variation des Chi²Tests, um auf Unababhängigkeit in drei-dimensionalen Kontingenztafeln zu testen. (SAS: mit CMH-Option (Zusatz-Statement: EXACT_mhchi) in PROC FREQ mit TABLES-Statement; Ausgabe der Teststatistik in der Tabelle „Cochran-Mantel-Haenszel Statistics“ in der Zeile „General Association“); Mantel-Haenszel-Chi²- Test: kann nur ordinal skalierte Merkmale testen; testet auf Unabhängigkeit zweier Einflußgrößen (Kontingenztafel); (SAS: 1.) mit CHISQ-Option in PROC FREQ mit TABLES-Statement; oder 2.) mit CMHOption (Zusatz-Statement: EXACT_mhchi) in PROC FREQ mit TABLESStatement; Ausgabe der Teststatistik in der Tabelle „Cochran-Mantel-Haenszel Statistics“ in der Zeile „Nonzero Correlation“); basiert auf dem Pearsonschen Korrelationskoeffizienten von Zeilenscores und Spaltenscores. H0: 'kein Zusammenhang zwischen Zeilen- und Spaltenvariable' bzw. 'es liegt keine "Korrelation" zwischen den zwei Merkmalen vor' gegen H1 ‚es liegt ein linearer Trend vor‘. Marke siehe Sprungmarke Maßkorrelation (nach Bravais-Pearson) betrachtet den Zusammenhang zwischen zwei Variablen (metrisch); entspricht der standardisierten Kovarianz; erfaßt nur linearem Zusammenhang; Wertebereich zwischen -1 und 1 (ist standardisiert); 0 = keine Korelation; Mc-Nemar-Test: (bei Vierfeldertafeln) für Vergleich von zwei abhängigen Stichproben X und Y mit dichotom (die Merkmale sind mit 0 und 1 codiert)erhobener Zielvariable. (Test auf Symmetrie zur 1. Hauptdiagonalen); H0: 'es liegt Symmetrie zur Hauptdiagonalen vor' oder 'P(X=1)=P(Y=1)' (Wahrscheinlichkeit für X=1 ist gleich der Wahrsch. Y=1). midpoints Option für den Befehl VBAR, um die Klassenmitten für die grafische Darstellung festzulegen: VBAR_v1_/_midpoints_=_a_TO_b_BY_c : Werte von a bis b mit Schrittweite c; minor siehe tickmarks. MSE mit N-k FG geschätzte, nicht erklärte Rest(Fehler-)streuung: MSE=SSE/(N-k) mit N=Gesamtstichprobenumfang, k=Anzahl der Unterschiedenen Gruppen bzw. Faktorstufen; die Wurzel aus MSE (= Root-MSE) ist der Standardfehler des Modells. MSM mit k-1 FG geschätzte, durch das Modell Streuung: MSM=SSM/(k-1) mit N=Gesamtstichprobenumfang, k=Anzahl der Unterschiedenen Gruppen bzw. Faktorstufen. MST mit N-1 FG geschätzte Gesamtstreuung: MST=SST/(N-1) mit N=Gesamtstichprobenumfang. Newman-Keuls-Test Odds Ratio ähnlich wie Tukey-Test aber mit gestaffelten Grenzdifferenzen. bestimmt das Chancenverhältnis zwischen exponiert zu erkranken und nicht exponiert zu erkranken: berechnet aber auch das relative Chancenverhältnis zwischen den Spalten einer Vierfeldertafel (Ouotient aus den Relative Risks). Overdispersion (siehe Underdispersion) Pearson -> Maßkorrelation nach Bravais-Pearson Pearsonscher Kontingenzkoeffizient (siehe Kontingenzkoeffizient) Produkt-Binomial-Modell Randhäufigkeiten von Faktor oder von Faktor B werden vorgegeben (bei Fallkontrollstudien sind dies die Erkrankungen, bei prästratifizierten Kohortenstudien ist dies die Exposition); hier kann nur die Homogenitätshypothes (nicht die Unabhängigkeitshypothese) überprüft werden: H0 'die Binomialwahrscheinlichkeiten in den Gruppen ist gleich' z.B. mit em Chi²-Test in PROC FREQ mit TABLES..../_chisq; Porportional-Hazard-Modell bei zwei Hazard-Verteilungen über die Zeit wird angenommen, daß beide die gleiche Verteilungsform haben und daß ein Proportionalitätsfaktor für den gesamten betrachteten Zeitraum gilt. Prüfglied ? Rangkorrelation wie Maßkorrelation nach Bravais-Pearson, aber mit den Rängen der Beobachtungen für die einzelnen Variablen (ordinal); prüft auf einen monotonen Zusammenhang; Wertebereich -1 bis 1; 0 = kein Zusammenhang. Regressionsanalyse untersucht die gerichtete Zusammenhangsstruktur zwischen (zwei) Variablen; dabei muß bekannt sein, welches die Zielvariable ist; (siehe auch Streuungszerlegung). Relative Risk (RR) Quotient aus zwei Wahrscheinlichkeiten; mit RR=1 sind beide Wahrscheinlichkeiten gleich groß R-Square Anteil erklärter Varianz scores werden verwendet, um kategorial (in der Regel ordinal) skalierten Variablen eine Intervallskala "überzustülpen"; in SAS werden, falls scores für eine Statistik verwendet werden, automatisch die Codierungswerte (der kategorial skalierten Variablen) als scores übernommen. Scree-Plot graphische Darstellung zur Hauptkomponentenanalyse (PCA); es werden die Eigenwerte der Hauptkomponente gegen die Nr. der Hauptkomponente aufgetragen. Shapiro-Wilk-Test Test auf Normalverteilung bei beliebigem µ und sigma²; wird in der PROC UNIVARIATE bei Stichproben vom Umfang n<=2000 verwendet; im Output wird die Teststatistik W und deren "Unter"-schreitungswahrscheinlichkeit Prob<W angegeben; kleine Werte führen hier zur Ablehnung von H0. Dieser Test setzt Homoskedastizität bei den Werten voraus. sidak bewirkt eine Adjustierung der Überschreitungswahrscheinlichkeit nach Sidak bei paarweisem t-Test (α=0.05 wird dann für das gesamte Experiment eingehalten). in PROC_ANOVA mit MEANS_vname_/_sidak; single = Single Linkage: Methode der hierarchischen Clusterbildung; Kriterium: minimale Distanz zwischen einem Punkt aus Cluster a und einem Punkt aus Cluster b: Sprungmarke neuer Startpunkt für die Weiterführung des Programms; Syntax: Name der Sprungmarke mit angehängtem ':' in einer Zeile des Programmtextes; darunter wird das Programm fortgeführt; Verweis auf die Sprungmarke mit GOTO; (Beispiel: Anweisung GOTO punkt1; Sprungmarkenzeile punkt1: ). SSE Summe der Fehlerstreuungen einer Zielvariablen. SSM Summe der durch das Modell erklärten Streuung. SST Gesamtstreuung einer Zielvariablen (in einem Regressionsmodell). Standardfehler für ein Modell; ist gleich der Wurzel aus dem MSE. Streuungszerlegung bei Regressionsmodellen; die Gesamtstreuung (SST) der Beobachtungen wird in einen durch das Modell erklärten Ateil (SSM) und eine Reststreuung (SSE: Fehlerstreuung) zerlegt; für eine Schätzung dieser Anteile müssen die Freiheitsgrade berücksichtigt werden: für SST = SSM + SSE mit N-1 = k-1 + N-k Freiheitsgraden (mit N=Gesamtstichprobenumfang, k=Anzahl der Unterschiedenen Gruppen bzw. Faktorstufen) ergibt sich dann MST = MSM + MSE, wobei M jeweils für mean steht (MSE = Varianz im engeren Sinne). Je nach Typ der Streuungszerlegung unterscheidet man Typ I die Zerlegung ist nicht symmetrisch, das Ergebnis hängt von der Reihenfolge der Faktoren im Modell ab, sie führt aber in jedem Fall zu einer auf die Modellannahmen begründete, vollständige Zerlegung der Gesamtvarianz. Typ III die Zerlegung ist symmetrisch, das Ergebnis hängt nicht von der Reihenfolge der Faktoren im Modell ab; die Gesamtvarianz wird aber nicht vollständig durch die Modellkomponenten (Faktoren, Wechselwirkung, Fehler) zerlegt, es bleibt ein Teil der Gesamtvarianz übrig, der in der Summe der durch das Modell erklärten (einschließlich Fehlerterm) nicht erfaßt wird. t bewirkt einen multiplen t-Test (paarweiser Vergleich der einzelnen Prüfglieder (Klassen): α=0.05 gilt nur für die einzelnen paarweisen Vergleiche); in PROC_ANOVA mit MEANS_vname_/_t; t-Test testet auf Gleichheit der Mittelwerte von zwei unverbundenen Stichproben; Voraussetzungen: gleiche, aber unbekannte Varianzen, Normalverteilung; der Test bekommt geringe Schwierigkeiten bei Abweichungen von der Normalverteil-ungsannahme, große Schwierigkeiten mit schiefen Verteilungen, sehr große Schwierigkeiten bei bimodalen (bzw. nicht unimodalen) Verteilungen. Studienmodell Multinomial-, Produkt-Binomial-, Hypergeometrisches. und PoissonModell. tickmarks major t. sind Achseneinteilungen mit Beschriftung; minor t. ohne Beschriftung liegen zwischen den major t.; werden mit AXIS_minor=... und _order=... festgelegt. tukey bewirkt einen multiplen Test nach Tukey (auch Tukey-Kramer-Test): (paarweiser Vergleich der einzelnen Prüfglieder (Klassen)) mit Adjustierung (α=0.05 gilt dann für das gesamte Experiment); hier wird eine zwischen den Mittelwerten zulässige Grenzdifferenz mit Konfidenzintervall bestimmt; liegt 0 (Null) in diesem Intervall, muß H0 beibehalten werden bzw. sind die Mittelwerte nicht signifikant verschieden. in PROC_ANOVA mit MEANS_vname_/_tukey;. unbalanciert (siehe balanciert) in SAS werden Teststatistiken für unbalancierte Daten unter TYPE III ausgegeben. Underdispersion bei der Poissonregression kann es vorkommen, daß die Varianz der Stichprobe deutlich von der theoretischen Varianz (hier Poissonverteilung) abweicht (dies wird in der Regel dadurch verursacht, daß die Nullklasse stärker/schwächer besetzt ist als theoretisch erwartet); die Abweichung wird anhand von Dispersionsmaßen bestimmt: <1 entspricht underdiperson, >1 overdispersion; bei der Poissonregression wird häufig der Quotient aus Deviance/Freiheitsgrade bzw. Pearson-Chi²/Freiheitsgerade genutzt (bei dem Vorliegen einer Poissonverteilung sind Varianz und Erwartungswert gleich); Faustregel: <9/10 = underdispersion (es liegt eher eine Binomialverteilung vor; kann aber mit Poissonverteilung gefittet werden), >10/9 = overdispersion (hier können Negative Binomialverteilungen gefittet werden). SAS: in PROC GENMOD kann bei underdispersion mit der Option ‚dspace‘ oder ‚pspace‘ der Skalierungsfaktor, bei overdispersion die Verteilungsannahme zu ‚dist=nb‘ (negative Binomialvtlg.) geändert werden. Varianz einer Zielvariable Y ist der Erwartungswert der quadrierten Abweichungen der Beobachtungen vom Mittelwert von Y. Varianzanalyse die Zielvariable ist eine stetige, metrische Zufalssvariable (ZV); im Modell werden zufällige und fixe Effekte (und eventuell Kovariablen: -> dann Kovarianzanalyse) unterschieden; beide Effekten werden mit kategorialen Daten bedient; zufällige Effekte gehen von stetigen, normalverteilten ZV aus, die nach Quantilen (-> gleiche Häufigkeiten in den Kategorien) klassiert werden. Varianzzerlegung siehe Streuungszerlegung. Verallgemeinerte Lineare Modelle (in SAS: mit GENMOD, LOGISTIK, CATMOD, GLIM, nicht mit GLM) Wilcoxon-Rangsummen-Test prüft auf Gleichheit der Mediane zweier unabhaägiger Stichproben; nicht-parametrisches Verfahren; keine Verteilungsannahme, aber Verteilungen müssen gleich schief sein; Umfang der Stichproben kann unterschiedlich sein; in SAS in der Procedure NPAR1WAY mit der Option wilcoxon; bei mehr als zwei Stichproben wird ein Kruskal-Wallis Test durchgeführt. Biom.Einf. 48 Wilcoxon-Vorzeichen-Rangtest prüft, ob der Median einer Stichprobe oder ob die Differenz der Mediane zweier verbundener Stichproben einen bestimmten Wert hat; nicht-parametrisches, verteilungsfreies Verfahren; Biom.Einf. 47 Yulescher Assoziationskoeffizient (siehe Assoziationskoeffizient) Beispiel 1a: %LET text1=text_A text_B %LET anzahl=b; %MACRO les1; %SCAN(&text1, &i, ' ') %MEND les1; %MACRO run1; %DO i=1 %TO &anzahl; PROC SQL; SELECT * FROM lib.%les1 ; QUIT; %END; %MEND run1; %run1; text_C; liest jeweils den i-ten String von text1 ein (Strings durch dopplte Leerzeichen getrennt. führt b-mal die Schleife aus Beispiel 1b: %LET text1=text_A text_B text_C; %LET anzahl=b; %MACRO les1; %SCAN(&text1, &i, ' ') %MEND les1; %MACRO run1; %DO i=1 %TO &anzahl; wie oben. PROC SQL; CREATE VIEW lib.v1 AS hier wird die Globalvariable ohne folgenden SELECT * SQL-Befehl abgearbeitet; der VIEW klappt so FROM a.%les1 und kann dann unten im Programm aufgerufen ; werden. QUIT; PROC SQL; SELECT * FROM lib.v1 Aufruf des VIEW. WHERE v1=a ; QUIT; %END; %MEND run1; %run1; Beispiel 1c: LIBNAME m 'S:\Langner\muell\'; DATA m.test; INPUT nr tx1$ a b c; CARDS; 1 eins 10 11 101 2 zwei 20 22 202 3 drei 30 33 303 4 vier 40 44 404 5 fünf 50 55 505 6 xxxx . . . 7 null 0 0 00 RUN; PROC PRINT data=m.test; RUN; %MACRO maki1(no,tex,aa); &no=&no+100; &tex=SUBSTR(&tex,2,2); &aa=&aa+1000; %MEND maki1; DATA m.muell; SET m.test; %maki1(nr,tx1,a); RUN; PROC PRINT data=m.muell; RUN; Beispiel 2a DATA dname; RETAIN v3 v2 v1; SET dalt; RUN; ändert die ursprüngliche Reihenfolge der Variablen in dalt (v1, v2, v3) in die Reihenfolge v3, v2, v1 in dname Beispiel 2b: PROC SQL; CREATE TABLE dname AS SELECT v3, v2, v1; FROM dalt ; QUIT; ändert die ursprüngliche Reihenfolge der Variablen in dalt (v1, v2, v3) in die Reihenfolge v3, v2, v1 in dname Beispiel 3: %LET tx1=sum_vb3a; %LET tx3=neu; %MACRO les1; %SCAN(&tx1, 2, '_') %MEND les1; DATA _NULL_; h1="%les1"; h2=h1||'_q'; CALL SYMPUT ('tx2', h2); h4="&tx3"||'_neu'; CALL SYMPUT ('tx4', h4); RUN; DATA test; &tx2=wert; &tx4=wert; OUTPUT; RUN; liest von tx1 den Teilstring hinter dem ‘_‘. an h1 wird über das Macro ein Teilstring der G.-variable tx1 übergeben. Konstruktion eines neuen Strings. Übertragen des Strings in die G.-variable tx2 Konstruktion eines neuen Strings. Übertragen des Strings in die G.-variable tx4 Verwendung des Inhalts von tx2 und tx4 als Variable(nnamen). zu Beispiel 4 MERGE - Statement: Folgendes ist dabei zu beachten (siehe auch Beispielprogramm 4 weiter unten): 1. die längste (= Anzahl der Datenzeilen) der gemergten Tabellen bestimmt die Länge der neuen Tabelle; bei der Verwendung von BY wird die Länge der neuen Tabelle als Anzahl der Datenzeilen (DZ) mit Übereinstimmung + Anzahl der DZ ohne Übereinstimmung aus Tabelle 1 + .... + Anzahl der DZ ohne Übereinstimmung aus Tabelle n. 2. die Variablen der neuen Tabelle setzten sich aus den übereinstimmenden Variablen(namen) der alten Tabellen + die nicht übereinstimmenden aus jeder der alten Tabellen zusammen (jeder Var.-name taucht nur einmal auf); in die Variablen der neuen Tabelle werden immer (auch bei gleichlautenden Variablennamen in den zu mergenden Tabellen) die Daten der in der MERGEZeile zuletzt genannten Tabelle, die noch Werte für die betreffende Datenzeile besitzt, übernommen; Achtung! dies beides gilt auch bei der Verwendung von BY (siehe 4.) 3. ohne BY werden die zu mergenden Tabellen parallel zeilenweise abgearbeitet, also jeweils die n-ten Zeilen miteinander kombiniert. 4. mit BY: folgendes Beispiel: Tabelle A und B sollen anhand der BY-Variable v zur Tabelle C gemerged werden: MERGE A B; (die Länge von C Æ siehe 1.; Anzahl der Variablen von C Æ siehe 2) SAS geht so vor: A und B werden zeilenweise abgearbeitet: - ungleiche v werden nacheinander in C eingefügt, wobei die eine Datei jeweils so lange an der Reihe ist, bis der von der anderen Datei vorgegebene Wert der BY-Variable v überschritten wird. - bei gleichen v gilt zunächst 2. (siehe oben); - falls in B die Werte zu v nur einmal auftauchen, in A aber mehrmals, dann werden für die erste gemergte Zeile bei den gleichlautenden Variablen die Werte von B übernommen und erst für die folgenden Zeilen die von A - falls in A und in B der gleiche Wert für v in mehreren Zeilen auftritt, so wird die 1. dieser Zeilen aus A mit der 1. der Zeilen aus B verknüpft, 2. aus A mit 2. aus B, und so weiter, bis in einer Datei ein höherer Wert für v auftritt: dann wird in dieser Datei die letzte Datenzeile für die Verknüpfung beibehalten, bis die übrigen Zeilen der anderen Datei mit gleichem v abgearbeitet sind. Beispiel 4: /************ Beispieldaten ********************/ DATA a; INPUT a b c @@; CARDS; 0 2 3 1 2 3 1 2 3 1 2 3 4 5 6 RUN; DATA b; INPUT a b c @@; CARDS; 1 1 8 1 1 77 2 2 8 2 2 77 RUN; DATA c; INPUT a b e @@; CARDS; . 9999 9999 1 11 111 1 88 888 3 33 333 5 55 555 6 66 666 RUN; TITLE 'Datei A'; PROC PRINT data=a; RUN; TITLE 'Datei B'; PROC PRINT data=b; RUN; TITLE 'Datei C'; PROC PRINT data=c; RUN; /************************************************/ TITLE 'Mergen von Datei A mit Datei B'; DATA test; MERGE a b; RUN; PROC PRINT data=test; RUN; TITLE 'Mergen von Datei B mit Datei A'; DATA test; MERGE b a; RUN; PROC PRINT data=test; RUN; TITLE 'Mergen von Datei A mit Datei C'; DATA test; MERGE a c; RUN; PROC PRINT data=test; RUN; TITLE 'Mergen von Datei C mit Datei A'; DATA test; MERGE c a; RUN; PROC PRINT data=test; RUN; TITLE 'Mergen von Datei A mit Datei C mit BY a'; DATA test; MERGE a c; BY a; RUN; PROC PRINT data=test; RUN; TITLE 'Mergen von Datei C mit Datei A mit BY a'; DATA test; MERGE c a; BY a; RUN; PROC PRINT data=test; RUN; Beispiel 5a: Daten-Export nach EXCEL mit FILENAME und PUT Folgende Vorbereitungen für den Export eines permanenten SAS-Datasets nach EXCEL müssen getroffen werden: 1. Änderung der Ländereinstellung auf USA, bzw. ‘.‘ als Trennzeichen für Nullstellen angeben. 2. EXCEL muß geöffnet sein und eine leere Tabelle enthalten. Achtung: Probleme bereiten Variablen mit Fließtext; hier werden Leerzeichen als Trennzeichen zwischen Variablen erkannt; dann die Option notab verwenden (siehe Beispiel 5d) FILENAME export DDE'excel | Tabelle1!z1s1:zasb'; * a = Anzahl Zeilen, b = Anzahl Spalten der zu bildenden Tabelle ; DATA _null_; SET libname.dname; * dname = die zu exportierende Datei ; FILE export; PUT v1 v2 v5-v8; * hier müssen alle zu exportierenden Variablen aufgeführt werden; Reihenfolge!; RUN; Beispiel 5b: Daten-Import von EXCEL nach SAS mit SQL Einige wichtige Punkte: - die erste Datenzeile der EXCEL-Datei wird für die Variablennamen verwendet - in der FROM...-Zeile wird der Tabellenname aus der EXCEL-Arbeitsmappe (ÆDatei) mit angehängtem $-Zeichen und in eckigen Klammern [] angegeben PROC SQL; CONNECT TO odbc (required); CREATE TABLE libname.dname AS SELECT * FROM CONNECTION TO odbc(SELECT * FROM [tabelle1$]) ; DISCONNECT FROM odbc; QUIT; Beispiel 5c: Daten-Import von EXCEL nach SAS mit FILENAME und INPUT In der FILENAME-Zeile muß folgendes ergänzt werden: - pfadname wird durch den vollständigen Pfad für die betreffende EXCELdatei ersetzt - datei wird durch den Namen der EXCEL-Datei ersetzt - Tabelle1 wird durch den EXCEL-Tabellennamen ersetzt - a, b, c, d werden durch die Zeilen- und Spaltennummern (alles Zahlen) der EXCELTabelle ersetzt, die den einzulesenden Datenblock begrenzen FILENAME import DDE "excel|pfadname\[datei.xls]Tabelle1!zasb:zcsd"; DATA dname; INFILE import dlm='09'x notab dsd missover; INPUT v1 v2 vtext$ v3; RUN; Beispiel 5d: Datenexport nach EXCEL mit FILENAME und PUT DATA dname; INPUT v1 vtext$15. CARDS; 1 text1 test test 2 text2 test 3 text3 test 33 4 x x x test 4 RUN; v3; 11 22 33 44 PROC PRINT data=dname; RUN; FILENAME export DDE "excel | Tabelle1!z2s2:z6s4" notab; * notab gewährleistet, daß strings vollständig übergeben werden; DATA _null_; SET dname; FILE export; PUT v1 '09'x vtext '09'x v3; * ‘09‘x fügt die durch notab entfernte Trennung zwischen den Variablen wieder ein ; RUN; *******************************************************; *** ohne notab würde das Ergebnis so aus sehen ***; FILENAME export DDE "excel | Tabelle1!z2s2:z6s20"; DATA _null_; SET dname; FILE export; PUT v1 vtext v3; RUN; Beispiel 6: Daten-Export nach EXCEL mit PROC DBLOAD DATA test; INPUT eins zwei drei; LINES; 1 2 3 4 5 6 7 8 9 RUN; PROC DBLOAD DBMS=EXCEL DATA=WORK.TEST; PATH='e:\test.xls'; PUTNAMES YES; LIMIT=0; LOAD; RUN; Beispiel 7: Verknüpfen von Dateiauszügen mit UNION (SQL) Klappt nicht: es werden nicht alle möglichen Datenzeilen in die neue Datei übernommen! %LET d4=m.hallo; DATA &d4; INPUT stoff_1-stoff_6; CARDS; 1 2 3 4 5 6 2 3 6 7 8 . 5 . . . . . 1 5 6 . . . 4 5 6 7 . . 1 2 4 5 6 7 1 2 4 5 7 8 1 2 3 4 5 6 1 2 3 4 5 6 6 . . . . . 6 . . . . . RUN; PROC PRINT data=&d4; RUN; PROC SQL; CREATE TABLE m.f2 AS SELECT stoff_1 AS FROM &d4 GROUP BY stoff_1 UNION SELECT stoff_2 AS FROM &d4 GROUP BY stoff_2 UNION SELECT stoff_3 AS FROM &d4 GROUP BY stoff_3 UNION SELECT stoff_4 AS FROM &d4 GROUP BY stoff_4 UNION SELECT stoff_5 AS FROM &d4 GROUP BY stoff_5 UNION SELECT stoff_6 AS FROM &d4 GROUP BY stoff_6 ; QUIT; stoff, count(stoff_1) AS anz_stof stoff, count(stoff_2) AS anz_stof stoff, count(stoff_3) AS anz_stof stoff, count(stoff_4) AS anz_stof stoff, count(stoff_5) AS anz_stof stoff, count(stoff_6) AS anz_stof Beispiel 8: PROC TRANSPOSE DATA m.test; INPUT a b c d; CARDS; 1 11 111 1 1 11 111 2 1 11 112 3 1 12 121 4 1 12 122 5 1 12 122 6 2 21 211 7 2 21 212 8 2 21 213 9 2 22 221 10 2 22 221 11 2 22 221 12 RUN; PROC PRINT data=m.test; RUN; PROC TRANSPOSE data=m.test out=m.tset; VAR d; RUN; PROC PRINT data=m.tset; RUN; PROC TRANSPOSE data=m.test out=m.tset; VAR a d; RUN; PROC PRINT data=m.tset; RUN; PROC TRANSPOSE data=m.test out=m.tset; VAR d; BY a; RUN; PROC PRINT data=m.tset; RUN; PROC TRANSPOSE data=m.test out=m.tset; VAR d; BY a c; RUN; PROC PRINT data=m.tset; RUN; PROC TRANSPOSE data=m.test out=m.tset; VAR c d; BY a b; RUN; PROC PRINT data=m.tset; RUN; PROC TRANSPOSE data=m.test out=m.tset; VAR c; BY d; RUN; PROC PRINT data=m.tset; RUN; Beispiel 9: %STR %LET tx1='test1'; %LET tx2=%str(test2); DATA m.m1; test2='hallo'; OUTPUT; RUN; TITLE "Versuch mal &tx2 zu sagen"; /** Hier wird 'test2' als Text **/ /** im Titel ausgegeben **/ DATA m.muell; SET m.m1; text1=&tx1; /** text1 erhält den Eintrag 'test1' **/ text2=&tx2; /** text2 erhält den Wert der Variablen test2, /** also 'hallo'. **/ RUN; PROC PRINT data=m.muell; RUN; Beispiel 10: %ARRAY und data new; set old; array abc{*} _character_; array def{*} _numeric_; length name $8; do i=1 to dim(abc); call vname(abc{i},name); call label(abc{i},name); output; end; do j=1 to dim(def); call vname(def{j},name); call label(def{j},name); output; end; stop; run; CALL VNAME und CALL LABEL /* all character variables in old /* all numeric variables in old /* name is not in either array */ */ */ /* get name of character variable */ /* get label of character variable */ /* write name to an observation */ /* get name of numeric variable /* get label of numeric variable /* write name to an observation */ */ */ Copyright (c) 1995, SAS Institute Inc., Cary, NC 27513-2414 USA. rights reserved. All Beispiel 11: SYMGET und %STR OPTIONS symbolgen; %LET h1=10; *** erstmalige Definition der Makrovar. h1 ***; %LET h2=h1_1=&h1.; %LET h3 = %str (h1_2= symget ( 'h1' ) ) ; %LET h4 =h1_3=input(trim(left(%str(symget('h1')),best.) ; %LET h5 = %str (h1_4= 1-1+ symget ( 'h1' ) ) ; %LET h1=20; *** Änderung des Wertes der Makrovariable h1 ***; DATA h; &h2.; *** hier wirkt sich die Änderung nicht aus ***; &h3.; *** hier wirkt sich die Änderung aus ***; *** ACHTUNG: h1_2 wird Character-Variable ***; &h4.; *** hier wirkt sich die Änderung aus ***; &h5.; *** hier wirkt sich die Änderung aus ***; *** allein durch die mathematischen Operatoren wird verhindert, dass h1_4 zur Character-Var. wird ***; RUN; PROC CONTENTS data=h; RUN; PROC PRINT data=h; RUN; Beispiel 12: PROC GENMOD und selbst definierte Link-Funktion Im unten aufgeführten Syntaxbeispiel steht in der Definition der Link-Funktion die Systemvariable _mean_ für die Zielvariable und in der Definition der Inversen der LinkFunktion steht _xbeta_ für den linearen Predictor. Das Beispiel stellt die logistische Regression nach. PROC GENMOD data=h; MODEL y=x1 ; FWDLINK link=log(_mean_/(1-_mean_)); INVLINK ilink=exp(_xbeta_)/(1+exp(_xbeta_)); RUN;