Universitätsrechenzentrum
Johannes Gogolok
900
900
700 700 500 500 300 300 100 100 120 100
8 7 6
80 5 4
60
3 2 4...
43 downloads
592 Views
431KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Universitätsrechenzentrum
Johannes Gogolok
900
900
700 700 500 500 300 300 100 100 120 100
8 7 6
80 5 4
60
3 2 40
1 0
Einführung in das Statistiksystem SAS
B/027/9705
© J.Gogolok URZ / FeU
2
3
Inhaltsverzeichnis: 1 DAS SAS-SYSTEM ............................................................................................................... ............................. 5 2 DAS SAS-PROGRAMM............................................................................................................. ....................... 5 2.1 DATEN ................................................................................................................................................................ 6 2.2 EIN SAS-BEISPIELPROGRAMM............................................................................................................................ 6 2.3 DIE SAS-SYSTEMOBERFLÄCHE ........................................................................................................................ 10 3 DIE SAS-SYNTAX ........................................................................................................................................... 12 3.1 SAS-ANWEISUNGEN ......................................................................................................................................... 12 3.2 SAS-VARIABLENNAMEN .................................................................................................................................. 13 3.3 SPEZIELLE VARIABLENNAMEN ......................................................................................................................... 14 3.3.1 Auswahlnamen.......................................................................................................................................... 14 3.3.2 Variablenlisten ......................................................................................................................................... 14 4 DER PROGRAMMAUFBAU ......................................................................................................................... 15 4.1 DER DATA-STEP ............................................................................................................................................. 15 4.1.1 Die DATA-Anweisung............................................................................................................................... 15 4.1.2 Datendefinition - INPUT-Anweisung ....................................................................................................... 16 4.1.3 Instream-Daten - CARDS-Anweisung ...................................................................................................... 23 4.1.4 Daten aus externen Dateien ..................................................................................................................... 24 4.1.5 Missing-Werte (Die MISSING-Anweisung) .............................................................................................. 25 4.2 DAS SAS-DATEIENSYSTEM .............................................................................................................................. 27 4.2.1 Temporäre Dateien................................................................................................................................... 27 4.2.2 Permanente Dateien (SAS-Systemfiles) .................................................................................................... 28 4.3 DATENMODIFIKATION ....................................................................................................................................... 30 4.3.1 Bildung neuer Variablen, Wertzuweisung ................................................................................................ 30 4.4 DATENSELEKTION ............................................................................................................................................ 31 4.4.1 Auswahl von Beobachtungen über die FIRSTOBS- und OBS-Option ...................................................... 32 4.4.2 IF-THEN-ELSE-Strukturen ...................................................................................................................... 32 4.4.3 Selektierendes IF ("subsetting-IF") .......................................................................................................... 35 4.4.4 Die DELETE-Anweisung .......................................................................................................................... 36 4.4.5 Die WHERE-Anweisung ........................................................................................................................... 37 4.4.6 Bildung von Subfiles - SET-Anweisung .................................................................................................... 39 5 DER PROC-STEP (AUSWERTUNGSPROZEDUREN) .............................................................................. 43 5.1 SAS-PROZEDUREN ........................................................................................................................................... 43 5.1.1 Ausgewählte Aufrufparameter .................................................................................................................. 44 6 VARIABLEN- UND WERTEETIKETTEN .................................................................................................. 46 6.1 VARIABLENLABELS - DIE LABEL-ANWEISUNG ................................................................................................ 46 6.2 VALUE-LABELS - DIE PROZEDUR FORMAT .................................................................................................... 47 6.2.1 Formatdefinition....................................................................................................................................... 47 6.2.2 Verwendung von Formaten (FORMAT-Anweisung) ................................................................................ 49 7 OUTPUT-GESTALTUNG (OPTIONS-ANWEISUNG) ............................................................................... 51 7.1 SEITENLÄNGE ................................................................................................................................................... 51 7.2 SEITENBREITE................................................................................................................................................... 51 7.3 SEITENAUSRICHTUNG ....................................................................................................................................... 51 7.4 TITEL UND FUßNOTEN ...................................................................................................................................... 52 7.4.1 Titel........................................................................................................................................................... 52 7.4.2 Fußnoten................................................................................................................................................... 52 7.5 UNTERDRÜCKEN VON SEITENELEMENTEN UND -FORMATEN............................................................................. 53 8 ABSCHLIEßENDES PROGRAMMBEISPIEL ............................................................................................ 54 9 AUFRUF DES SAS-SYSTEMS....................................................................................................................... 55 9.1 WINDOWS-VERSION ...................................................................................................................................... 55 9.2 UNIX-VERSIONEN ........................................................................................................................................... 55
4
9.2.1 VT100/VT200-Modus ............................................................................................................................... 55 9.2.2 X-Windows-Modus.................................................................................................................................... 55 10 ARBEITEN MIT DEM SAS-EDITOR......................................................................................................... 55 11 ANHANG: BEISPIELE ZUR PROZEDURSYNTAX................................................................................. 55 11.1 PROC FACTOR ............................................................................................................... ............................. 55 11.2 PROC FREQ ................................................................................................................. ................................ 55 11.3 PROC MEANS................................................................................................................ .............................. 55 11.4 PROC PRINCOMP ............................................................................................................. .......................... 55 11.5 PROC PRINT ................................................................................................................ ................................ 55 11.6 PROC REG.................................................................................................................. .................................. 55 11.7 PROC SIMLIN ............................................................................................................... ............................... 55 11.8 PROC SORT ................................................................................................................. ................................ 55 11.9 PROC SUMMARY .............................................................................................................. ......................... 55 11.10 PROC SYSLIN.............................................................................................................. .............................. 55 11.11 PROC TTEST............................................................................................................... ............................... 55 11.12 PROC UNIVARIATE .......................................................................................................... ....................... 55 12 LITERATURLISTE.............................................................................................................. ......................... 55
5
1 Das SAS-System SAS ("Statistical Analysis System") ist ein für Statistik-Anwender aus den unterschiedlichsten Bereichen geeignetes Programmsystem zur Datenverwaltung und Datenanalyse, das darüberhinaus Eigenschaften einer problemorientierten höheren Programmiersprache besitzt. Es ist für viele verschiedene Rechner verfügbar, sowohl für Großrechner als auch für Arbeitsplatzrechner. Es kann unter verschiedenen Betriebssystemen gefahren werden, so z.B. unter AOS/VS, CMS, DOS (MS-DOS bzw. PC-DOS), WINDOWS, MVS, PRIMOS, UNIX, VMS oder VSE. Das Programmsystem SAS besteht aus mehreren Komponenten, die je nach Bedarf modular installiert und implementiert werden können: • SAS/BASE enthält die Basissoftware für alle Zusatzpakete und grundlegende Utilities und Auswertungsprozeduren für deskriptive statistische Analysen und Aufbereitung von Daten. • SAS/STAT enthält Prozeduren für univariate und multivariate statistische Analysen. • SAS/GRAPH enthält Prozeduren zur Grafik. • SAS/FSP enthält Prozeduren für interaktives Datenhandling und menügesteuerte Anwendungen. • SAS/ETS enthält Prozeduren für Zeitreihenanalyse und ökonometrische Modelle. • SAS/IML enthält Prozeduren zur Matrixverarbeitung. • SAS/OR enthält Prozeduren zum Projektmanagement und linearen Programmierung. • SAS/QC enthält Prozeduren zur statistischen Qualitätskontrolle. • SAS/ASSIST ermöglicht die menügesteuerte Benutzung von SAS auch ohne Kenntnisse der SAS-Syntax. • SAS/AF ermöglicht die Generierung eigener SAS-Fenster. • SAS/CONNECT für die Micro-Host-Kommunikation. Das SAS-System ist ein sehr mächtiges und damit auch sehr umfangreiches Auswertungsinstrument. Die Beschreibung aller Komponenten und Möglichkeiten, die SAS bietet, würde den Rahmen einer Einführung sprengen, wie sie diese Broschüre bietet. Die Auswahl der im folgenden beschriebenen Verfahren, die dem Anfänger einen guten Einstieg bieten sollen, wurde auf Grund von Erfahrungen in Seminaren zur Einführung in SAS sowie in der Benutzerberatung des URZ getroffen. Für das problemlose Arbeiten mit SAS sind eventuell zusätzlich die Originalhandbücher des Herstellers oder entsprechende deutsche Publikationen zu SAS erforderlich (siehe Literaturverzeichnis). Der Aufruf des Programmsystems SAS ist unabhängig vom Rechnersystem an der FeU weitestgehend gleich, die Dateiverwaltung sowie die Druck- und Graphikausgabe sind rechner- und betriebssystemabhängig. Auf die unterschiedlichen Varianten wird im Text, soweit nötig, gesondert verwiesen.
2 Das SAS-Programm
6
2.1 Daten Auszuwertende Daten werden an Programme i.d.R. als rechteckige Datenmatrizen übergeben. Die meisten Datensammlungen setzen sich aus mehreren solchen Datenwerten (numerisch und/oder alphanumerisch) zusammen. Man befragt beispielsweise Mitglieder einer Gruppe nach bestimmten persönlichen Merkmalen und trägt die Antworten in eine Tabelle ein. Alle befragten Personen haben unterschiedliche Antworten auf die Fragen gegeben; nicht beantwortete Fragen wurden vom Interviewer mit besonderen Markierungen, den fehlenden Werten (missing), versehen. Es ergibt sich daraus die folgende, rechteckige Datenstruktur, auch Datenmatrix (m x n - Datenmatrix) genannt: Name Barbara Claudia Frank Heinz Anne Joachim Thomas Ursula
Geschlecht w w m m w m m w
Alter 23 27 31 44 . 26 51 49
Größe 168 165 179 181 170 191 178 .
Gewicht 58 53 . 79 60 87 80 49
Diese Matrix enthält für jeden Merkmalsträger oder "Beobachtung" (engl. observation) einen Meßwert (engl. value) in einer Variablen (engl. variable). Merkmalsträger (observations) sind die befragten Personen, Merkmale (variables) sind die Ausprägungen der Eigenschaften. Die Variablen (Merkmale) können numerisch sein (Zahlen) oder auch in einer alphanumerischen Form vorliegen (Buchstaben mit oder ohne Zahlen). Merkmale, die nur durch Zahlen dargestellt werden, heißen numerische Variablen (engl. numeric variables); Merkmale, deren Ausprägungen auch Buchstaben enthalten, heißen Zeichenvariable (engl. character variables). Übertragen auf die Tabelle gilt also: • Die Gesamtheit aller Werte bildet die Daten (Rohdaten), in der EDV oft auch Auswertungsdatensatz genannt (nicht zu verwechseln mit dem physikalischen Satz = Datenzeile = Beobachtung). • Die einzelnen Spalten der Tabelle bilden als Bündel von Datenwerten jeweils eine Variable (Geschlechtsvariable, Größenvariable usw.). • Die komplette Information über eine Person ist eine Beobachtung (Zeile). • Jede Beobachtung der Tabelle besteht aus 5 Variablen - Name, Geschlecht, Alter, Größe und Gewicht. • Die einzelnen erhobenen Werte - Claudias Geschlecht, Annes Alter, Joachims Größe usw. sind sog. Datenwerte oder Variablenausprägungen. • Abgespeichert auf einem Speichermedium bilden die Daten eine Datei (Rohdatendatei). Vor der Auswertung durch ein EDV-Programm muß eine solche Rohdatendatei vorliegen. Ob sie allerdings durch die Erfassung von gemessenen, erhobenen oder anders ermittelten Werten oder über die Erstellung mittels anderer EDV-Programme entstand, ist daher unerheblich. Zum Zwecke der Auswertung muß sie programmspezifisch eingelesen und verarbeitet werden. Wie dies am Beispiel von SAS funktioniert, sei, ohne zuerst genauer auf die SAS-Syntax einzugehen, am Beispiel erläutert.
2.2 Ein SAS-Beispielprogramm
7
Ein SAS-Programm besteht aus einer Folge von Anweisungen (commands), die in unterschiedlichen Modi (interactive mode, batch mode u.a.) an SAS zur Verarbeitung übergeben werden können. Die Anweisungen müssen den Regeln der SAS-Sprache genügen. Das SAS-Programm wird zeilenweise über einem Texteditor oder über den SAS-eigenen Editor in eine Datei geschrieben und SAS zur Bearbeitung übergeben. Das SAS-System führt die Anweisungen der Reihe nach aus und erstellt ein Protokoll mit Meldungen und Ergebnissen. Die eigentliche Auswertung erfolgt durch eine Statistikprozedur - hier die Prozedur MEANS (Aufruf: PROC MEANS), die eine Mittelwertberechnung für Alter, Größe und Gewicht (siehe Musterdatenmatrix auf S. 6) vornimmt. Ein typisches SAS-Programm besteht mindestens aus zwei Teilen (Steps): • DATA-Step - zur Datenbeschreibung und Modifikation • PROC-Step - Aufruf einer Auswertungsprozedur zur Auswertung der Daten data ein; title 'SAS - Beispielprogramm'; filename daten 'c:\work\rohdat.dat'; infile daten; input name $ 1-7 geschl $ 9 alter 11-12 groesse 14-16 gewicht 18-19; proc means; var alter groesse gewicht; run;
Die Daten werden in der Form einer Matrix eingelesen: Barbara w 23 168 58 Claudia w 25 165 53 Frank
m 31 179 91
Heinz
m 44 181 79
Anne
w 39 170 60
Joachim m 26 191 87 Thomas
m 51 178 80
Ursula
w 49 167 58
DATA EIN benennt und definiert eine SAS-Arbeitsdatei namens EIN. TITLE definiert die Seitenüberschrift für das SAS-Ergebnisprotokoll. FILENAME verkettet den Betriebssystem-Dateinamen ( physikalischer Dateiname) mit einem Dateizugriffsnamen für SAS (mnemonischer Dateiname). INFILE ordnet die einzulesende Datei zu. Mit INPUT wird SAS eine Beschreibung des einzulesenden Datensatzes geliefert. PROC ruft die Auswertungsprozedur auf (hier MEANS) RUN bewirkt den Start des SAS-Programms.
8
Die aufgerufene Prozedur liefert die folgende Ausgabe: SAS - Beispielprogramm
1 16:39 Thursday, November 2, 1995
Variable N Mean Std Dev Minimum Maximum ------------------------------------------------------------------ALTER 8 36.0000000 11.2249722 23.0000000 51.0000000 GROESSE 8 174.8750000 8.9032498 165.0000000 191.0000000 GEWICHT 8 70.7500000 15.0404217 53.0000000 91.0000000 -------------------------------------------------------------------
Nach der mit TITLE definierten Seitenüberschrift, die von SAS zusätzlich mit einer Seitennummer und Laufdatum versehen wird, folgt die Ausgabe der Prozedur MEANS. Diese berechnet für die drei angegebenen Variablen den Mittelwert (Mean), Standardabweichung (Std Dev) das Maximum und Minimum (bei 8 eingelesenen Datensätzen - N=8). Das Beispielprogramm ist mit Absicht relativ einfach gefasst, um dem Leser einen Überblick über die Codierung zu geben. Daß ein solches Programm durchaus umfangreicher werden kann, ohne daß es zusätzliche Aufgaben erfüllt, wird weiter unten im Text demonstriert. Zusätzlich zur Prozedurausgabe wird eine sog. SAS-Log erzeugt, die Meldungen des Systems (Ausführungsmeldungen, Warnungen und/oder Fehlermeldungen) enthält. Im Falle des obigen (fehlerfreien) Programms hat diese die folgende Form: NOTE: Copyright(c) 1989 by SAS Institute Inc., Cary, NC USA. NOTE: SAS (r) Proprietary Software Release 6.08 TS404 Licensed to UNIVERSITAET DORTMUND LANDESLIZENZ NRW, Site 0080582011. 1 2 3 4 5 6 7 8
data ein; title 'SAS - Beispielprogramm'; filename daten 'c:\work\rohdat.dat'; infile daten; input name $ 1-7 geschl $ 9 alter 11-12 groesse 14-16 gewicht 18-19;
NOTE: The infile DATEN is: FILENAME=c:\work\rohdat.dat, RECFM=V,LRECL=132 NOTE: 8 records were read from the infile DATEN. The minimum record length was 19. The maximum record length was 19. NOTE: The data set WORK.EIN has 8 observations and 5 variables. NOTE: The DATA statement used 6.8 seconds. 9 10 11
proc means; var alter groesse gewicht; run;
NOTE: The PROCEDURE MEANS used 2.02 seconds.
Die hier gezeigte SAS-Log enthält nur Ausführungsmeldungen des Beispielprogramms (siehe NOTE im obigen Output-Beispiel). In der LOG-Datei werden alle Programmanweisungen aufgelistet und durchnumeriert. Treten Probleme auf, wird die Anweisung, die zum Auftreten des Problems beigetragen hat, kenntlich gemacht und eine Meldung ausgegeben. In der Regel werden die Meldungen in der LOG-Datei unmittelbar nach der dazugehörigen Anweisung oder in ihrer unmittelbarer Nähe ausgegeben. Es gibt unterschiedliche Arten von Meldungen. • Ist das SAS-Programm ohne Fehler abgelaufen, enthält die SAS-LOG nur rein informative Meldungen, die mit dem String NOTE: beginnen (s.o.) Trotz des rein informativen Inhalts dieser Meldungen sollte man sie dennoch nicht außer Acht lassen, denn oft enthalten sie wichtige Informationen zu Dateiinhalten, zum
9
Programmablauf oder, wie im obigen Beispiel, zu Dateizuordnungen oder dem Umfang der ausgewerteten Daten. • Treten während der Verarbeitung Fehler auf, die jedoch nicht so schwerwiegend sind, daß sie sich auf den weiteren Programmablauf und die statistischen Auswertungen auswirken, werden Warnungen (WARNING) ausgegeben und in der LOG-Datei protokolliert: 144 145 146
proc freq data=ausdat; title 'Grundauszählung der Variablen'; labels f1g1=Wert der eingelesenen Verkaufsfläche -----14 147 tables f1g1 -- f1g4; 151 format f1g1 -- f1g4 f1fmt.; 153 run; WARNING 14-169: Assuming the symbol LABEL was misspelled as LABELS.
Der Programmablauf wird nicht abgebrochen. Im obigen Beispiel wird im Programm statt des Schlüsselwortes LABEL das nicht definierte Wort LABELS benutzt. SAS ignoriert die falsche Angabe ersetzt sie durch das richtige Schlüsselwort und setzt die Verarbeitung fort. • Eine nicht ausführbare Anweisung führt zur Ausgabe einer Fehlermeldung (ERROR) in der LOG-Datei und in der Regel mindestens zum Abbruch der Verarbeitung eines DATAoder PROC-Steps oder des gesamten Programms (insbesondere dann, wenn das Programm aus nur einem DATA- und/oder PROC-Step besteht): 98 99 ---202 100 101 105 107
proc freq title 'Grundauszählung der Variablen'; --------------------------------200 tables f1g1 -- f1g4; format f1g1 -- f1g4 run;
f1fmt.;
ERROR 202-322: The option or parameter is not recognized. ERROR 200-322: The symbol is not recognized. NOTE: The SAS System stopped processing this step because of errors. NOTE: The PROCEDURE FREQ used 0.88 seconds.
Das Beispiel enthält eine PROC-Anweisung, die nicht durch ein Semikolon abgeschlossen ist und dadurch mit der folgenden TITLE-Anweisung zusammenfällt. Die TITLE-Anweisung wird vom System als eine unbekannte Option oder Parameter der PROC-Anweisung interpretiert und das Programm daraufhin abgebrochen. • Bei Fehlern in den einzulesenden Daten wird ebenfalls eine Fehlermeldung in die LOGDatei ausgegeben:
10
NOTE: NOTE: NOTE: NOTE: RULE: 7
Invalid data for F1G3 in line 7 8-8. Invalid data for S9 in line 8 31-31. Invalid data for S10 in line 8 32-32. Invalid data for S11 in line 8 33-34. ----+----1----+----2----+----3----+----4----+----5----+ 1 42x22222 222222332423 1234 551472 1 1 1 7 3 7 5 1 56 1666221226524 68 8 22000010000000 60 32 00000000 acd2 1400 0 1 9999696 2 54 ID=1 F1G1=4 F1G2=2 F1G3=. F1G4=2 F2G5=2 F2G6=2 F2G7=2 F2G8=2 F3U1=2 F3U2=2 F3U3=2 F3U4=2 F3U5=2 F3U6=2 F4U7=3 F4U8=3 F4U9=2 F4U10=4 F4U11=2 F4U12=3 F5P1=1 F5P2=2 F5P3=3 F5P4=4 F6P5=5 F7P6=5 F7P7=1 F7P8=4 F7P9=7 F8P10=2 F9A1=1 F10A2=1 F10A3=1 F10A4=7 F10A5=3 F10A6=7 F10A7=5 F10A8=1 F10A9=1 F11A10=6 F11A11=6 F11A12=6 F12A13=2 F12A14=2 F12A15=1 F12A16=2 F13A17=2 F13A18=6 F13A19=5 F14A20=2 F15A21=4 S1=2 S2=2 S3B1=0 S3B2=0 S3B3=0 S3B4=0 S3B5=1 S3B6=0 S3B7=0 S3B8=0 S3B9=0 S3B10=0 S3B11=0 S3B12=0 S4=6 S5=0 S6=3 S7=2 S8P1=0 S8P2=0 S8P3=0 S8P4=0 S8P5=0 S8P6=0 S8P7=0 S8P8=0 S9=. S10=. S11=. S12=1400 S13=0 S14=1 S15=99996 S16=96 S17=2 _ERROR_=1 _N_=4
Der Meldungstext gibt in einem solchen Fall Auskunft darüber, welche Variablen in welchen Zeilen und Spalten der Daten als fehlerhaft (abweichend von der Definition in der INPUTAnweisung) erkannt wurden. Im obigen Beispiel sind es die Variablen F1G3 in (Zeile 7, Spalte 8), S9 (Zeile 8, Spalte 31), S19 (Zeile 8, Spalte 32) und S11 (Zeile 8, Spalte 33-44). Zusätzlich wird der Inhalt der kompletten fehlerhaften Beobachtung ausgegeben, in der Form, daß jeder definierten Variablen der eingelesene Wert zugewiesen wird (F1G1=1, F1G2=...usw). Dieses ermöglicht oft die Kontrolle, ob die Daten tatsächlich fehlerhaft sind oder ob in der INPUT-Anweisung nur eine falsche Spalte oder falscher Datentyp angegeben wurden. Wird ein fehlerhafter Datensatz beim Einlesen identifiziert, setzt SAS den Wert der Systemvariablen _ERROR_ um 1 nach oben (siehe Beispiel _ERROR_=1). Dabei ist es unerheblich, ob einer oder mehrere Datenfehler in diesem Datensatz entdeckt wurden. Wird der maximal zulässige Wert dieser Variablen erreicht (durch mehrere fehlerhafte Datensätze), bricht SAS die Verarbeitung ab. Die maximale Anzahl möglicher fehlerhafter Datensätze, die zu einer Fehlermeldung führen sollen, kann über die Systemoption ERRORS= spezifiziert werden. Wird beispielsweise ERRORS=10 angegeben, so werden für die ersten 10 fehlerhaften Datensätze entsprechende Fehlermeldungen ausgegeben. Sind mehr fehlerhafte Datensätze vorhanden, wird die Verarbeitung fortgesetzt, aber keine Fehlermeldung mehr ausgegeben. Bei der Fehlerkorrektur (außer bei Datenfehlern) ist es empfehlenswert, die Fehler systematisch der Reihe nach, mit dem ersten beginnend, zu beheben. Häufig sind weiter im Programm liegende Fehler Folgefehler eines vorhergehenden; wird dieser behoben, verschwindet oft ein oder mehrere dahinterliegende. Mit der Überprüfung der Daten sollte auf jeden Fall erst dann begonnen werden, wenn das Programm syntaktisch vollkommen fehlerfrei ist.
2.3 Die SAS-Systemoberfläche Alle drei an der FeU verfügbare Versionen von SAS (DOS, Windows, UNIX) arbeiten mit einer Fensteroberfläche, die aus drei Grundfenstern besteht: • dem Editor-Fenster - zum Editieren (Erstellen und Ändern) eines SAS-Programms; • dem Output-Fenster - für die Ausgabe der Ergebnisse der SAS-Prozeduren; • dem Log-Fenster - für die Ausgabe von Systemmeldungen. Der Vorteil des Fenstersystems, insbesondere des Editor-Fensters, liegt darin, daß alle Bearbeitungsvorgänge (sowohl für Programme als auch für Daten) sowie Sicherungsvorgänge in einer Oberfläche abgewickelt werden können und somit das Erlernen der Bedienung eines oder mehrerer zusätzlicher Editoren überflüssig ist.
11
Der gesamte Programmablauf inclusive der Ergebnisse und Systemmeldungen kann über die Fensteroberfläche jederzeit überwacht und gesteuert werden. Die Inhalte aller genannten Fenster lassen sich auf externen Dateien sichern, wodurch eine permanente Speicherung von Programmen, Daten und Auswertungsergebnissen ohne Probleme möglich ist. Das Arbeiten mit diesen Fenstersystemen wird weiter im Text beschrieben.
12
3 Die SAS-Syntax 3.1 SAS-Anweisungen Ein SAS-Programm besteht aus einer Reihe von SAS-Anweisungen. Jede Anweisung beginnt mit einem Schlüsselwort, welches die Anweisungsart spezifiziert. Für alle SASAnweisungen gelten einige allgemeine Grundregeln: • Jede SAS-Anweisung muß mit einem Semikolon (;) abgeschlossen werden. • Die Anweisungen können formatfrei angegeben werden, d.h., sie können an beliebiger Stelle einer Zeile beginnen und enden. • In einer Programmzeile können mehrere Anweisungen stehen. • Die Schreibweise der Anweisungen ist beliebig - Groß- oder Kleinschreibung (in den Beispielen dieses Kurses wird aus Gründen der besseren Lesbarkeit die Großschreibung benutzt). Beispiel: DATA WERT; INPUT ALTER GESCHL GEWICHT; PROC PRINT; RUN;
oder DATA WERT; INPUT ALTER GESCHL GEWICHT PROC PRINT; RUN;
• Zwischen den Anweisungselementen muß mindestens ein Leerzeichen („blank“) als Trennung stehen. Aus Lesbarkeitsgründen können auch mehrere Leerzeichen verwendet werden. Diese werden von SAS immer als ein Leerzeichen interpretiert. • Eine SAS-Anweisung kann auch über mehrere Zeilen fortgesetzt werden. Als Anweisung gilt immer eine Wortfolge zwischen zwei Semikolonzeichen (;). Beispiel: DATA WERT; INPUT ALTER GESCHL GEWICHT; PROC PRINT; RUN;
• Zwischen einzelnen Anweisungen können Leerzeilen verwendet werden. Zusammen mit der Möglichkeit, die Anweisungen an beliebiger Stelle einer Zeile beginnen und enden zu lassen und der beliebigen Verwendung von Leerzeichen ergeben sich dadurch vielfältige Möglichkeiten, ein SAS-Programm zu gliedern und damit lesbarer zu gestalten, insbesondere dann, wenn das Programm einen größeren Umfang einnimmt. • Die Lesbarkeit eines SAS-Programms kann zusätzlich durch Kommentarzeilen erhöht werden. Es werden zwei Formen von Kommentarzeilen akzeptiert: ⇒ mit einem Stern (*) beginnend und mit einem Semikolon endend: *BERECHNUNG DES MITTELWERTES;
Eine solche Kommentaranweisung muß in der Spalte 1 der Anweisungszeile beginnen, kann allerdings über mehrere Zeilen fortgesetzt werden:
13
*----------------------------------+ | BERECHNUNG DES MITTELWERTES | +----------------------------------+; ⇒ mit der Zeichenfolge Schrägstrich-Stern (/*) beginnend und mit „*/“ endend: /* BERECHNUNG DES MITTELWERTES */
Hierbei ist ein Semikolon als Abschluß nicht notwendig: IF WERT1 < 55 THEN FEHLER1 = 1; /*
/*
Prüfen Wert Variable WERT1
Setzen Fehlerwert
*/
*/
Eine solche Kommentaranweisung darf nicht in der Spalte 1 beginnen, da die Zeichenfolge /* als ENDSAS-Kommando interpretiert wird und die SAS-Sitzung beendet.
3.2 SAS-Variablennamen Zur eindeutigen Kennzeichnung von Variablen werden ihnen Namen gegeben. Für Variablennamen gelten ebenfalls einige Grundregeln: • SAS-Variablennamen dürfen maximal 8 Zeichen lang sein. • Sie müssen alphanumerisch (mit einem Buchstaben) beginnen, dürfen außer den Zeichen A-Z, a-z und den Ziffern 0-9 keine Sonderzeichen enthalten, mit Ausnahme des Unterstrichs („_“). • Leerzeichen innerhalb von Variablennamen sind nicht zulässig. Beispiele: X Y ALTER GESCHL VAR1 VAR01 V_1 V01_1 ALT_ER A_LTER ALTE_R V001 V002
Zu vermeiden sind Variablennamen, die als erstes und/oder letztes Zeichen einen Unterstrich („_“) enthalten, da diese Form von SAS für automatisch generierte Programmvariablen benutzt wird. Beispiele: _N_
_TYPE_
_ERROR_
14
3.3 Spezielle Variablennamen
3.3.1 Auswahlnamen Für Dateien, die sehr viele Variablen enthalten, gibt es die Möglichkeit, eine Auswahl definierter Variablen mittels Auswahlnamen vorzunehmen. Dieses setzt allerdings voraus, daß die auszuwählenden Variablen vorher im Programm definiert (den Typ numerisch oder alphanumerisch zugeordnet) wurden. Dazu siehe INPUT-Anweisung -Abschnitt 5.1.2. Es gibt drei Auswahlnamen: • _ALL_ • _CHARACTER_ • _NUMERIC_
bezeichnet alle definierten Variablen einer Datei; bezeichnet alle alphanumerischen (Zeichen-)Variablen einer Datei; bezeichnet alle numerischen Variablen einer Datei.
3.3.2 Variablenlisten Werden Variablen bei ihrer Definition (siehe INPUT-Anweisung) fortlaufend durchnumeriert mit dem gleichen Namensstamm und einer fortlaufenden Nummer- , können zu ihrer Auswahl Namenslisten benutzt werden. Diese bestehen aus der Nennung der ersten und der letzten auszuwertenden Variablen, verbunden durch einen einfachen Bindestrich. Beispiel: Eine Datei enthalte die Variablen VAR1 bis VAR5; dann gilt: VAR1-VAR5
entspricht
VAR1 VAR2 VAR3 VAR4 VAR5
Besitzen die Variablen keinen gemeinsamen Namensstamm, können ebenfals Namenslisten benutzt werden, allerdings dann in Verbindung mit einem doppelten Bindestrich („- -“). Beispiel: Eine Datei enthalte die Variablen A1, B1, VAR1 ALTER GESCHL W1. Dann sind folgende Schreibweisen äquivalent: A1--W1
oder oder
A1 B1 VAR1 ALTER GESCHL W1 _ALL_ (da alle Variablen gemeint sind)
A1--ALTER
oder
A1 B1 VAR1 ALTER
Näheres zur Anwendung - siehe Prozeduraufrufe.
15
4 Der Programmaufbau 4.1 Der DATA-Step 4.1.1 Die DATA-Anweisung Der DATA-Step beginnt grundsätzlich mit einer DATA-Anweisung. Jedes SAS-Programm muß mindestens einen DATA-Step und somit auch eine DATA-Anweisung enthalten. Diese Anweisung hat zwei Funktionen: • Eröffnen des DATA-Steps. • Benennen der zu erstellenden SAS-Arbeitsdatei(en). Sie hat die allgemeine Form: DATA [SAS-dateiname [(optionen)]];
SAS-dateiname ist ein vom Benutzer zu vergebender Name für die SAS-Systemarbeitsdatei muß den SAS(ein sog. mnemonischer Dateiname). Dieser Name Namenskonventionen genügen, d.h.: • Maximal 8 Zeichen lang sein, • alphanumerisch beginnen, • außer dem Unterstrich "_" keine Sonderzeichen enthalten. Beispiele: DATA AUSWAHL1; DATA A1_K22; Wird kein SAS-dateiname vergeben, generiert SAS nach der sog. DATAn-Konvention eigene Dateinamen in der Form DATA1, DATA2,...,DATAn. Es ist jedoch empfehlenswert, eigene Dateinamen für die System-Arbeitsdateien zu vergeben, um die spätere Zuordnung dieser Dateien zu Auswertungsprozeduren zu vereinfachen. Dieses wird insbesondere dann wichtig, wenn in einem Programm mehrere Arbeitsdateien unterschiedlichen Inhalts erstellt und von mehreren Auswertungsprozeduren bearbeitet werden sollen.
16
4.1.2 Datendefinition - INPUT-Anweisung Auf die DATA-Anweisung folgt die INPUT-Anweisung, welche die Funktion hat, den einzulesenden Variablen Namen zuzuordnen und ihre Positionen in den Sätzen der Eingabedateien zu bestimmen. Über die INPUT-Anweisung können die unterschiedlichsten Datenformate eingelesen werden; wir beschränken uns hier jedoch nur auf die einfachsten und gebräuchlichsten Formen dieser Anweisung.
4.1.2.1 Formatfreie Eingabe ('list input') Die formatfreie, nicht spaltengebundene Eingabe ist anwendbar wenn: • In den Eingabezeilen die einzelnen Datenwerte durch ein oder mehrere Leerzeichen voneinander getrennt sind, • fehlende Datenwerte durch einen Punkt "." gekennzeichnet sind, • alphanumerische Werte nicht länger als 8 Byte sind. Die Anweisung hat die Form: INPUT variable_1 [$] [...[variable_n [$] ]];
mit:
variable
Name der einzulesenden Variablen Kennung für einen alphanumerischen Variablenwert
Allen Variablen der einzulesenden Datei müssen Namen zugeordnet werden. Bei der Vergabe der Namen ist zu beachten, daß die Variablen in der Reihenfolge eingelesen werden, in der ihre Namen in der INPUT-Anweisung stehen. Auslassungen sind nicht möglich. Beispiele: DATA PROBE1; INPUT VAR1 VAR2 VAR3;
liest drei numerische Variablen VAR1, VAR2 VAR3 ein. DATA PROBE2; INPUT VAR1 VAR2 $ VAR3;
liest zwei numerische Variablen VAR1 und VAR3, sowie eine alphanumerische Variable VAR2 ein.
17
4.1.2.2 Spaltengebundene Eingabe ('column input') Diese Eingabeart wird verwendet wenn: • Werte gleicher Variablen in den Datensätzen immer in den gleichen Spalten stehen. • Die Werte numerisch oder alphanumerisch sind. Die Variablenwerte müssen in den Datensätzen nicht durch 'blanks’ voneinander getrennt sein. Wichtig ist ihre konstante relative Zeilenposition. Die INPUT-Anweisung hat in der spaltengebundenen Eingabe die Form: INPUT variable_1 [$] startspalte [-endspalte] [.dezimalstellen] [...[variable_n [$] startspalte [-endspalte] [.dezimalstellen]];
mit:
variable $ startspalte -endspalte dezimalstellen
Name der einzulesenden Variablen Indikator für einen alphanumerischen Wert die erste Spalte des Datenwertes die letzte Spalte des Datenwertes. Entfällt, wenn die Variable nur eine Spalte im Datensatz belegt.Trennstrich zwingend ! Anzahl Dezimalstellen im Datenwert, wobei der Dezimalpunkt nicht im Datenwert markiert werden muß.
Beispiele: INPUT WERT 3-7 .1;
ergibt: Daten
Resultat
01 456 032.543 12-34 12 67
4.5 2.543 -3.4 6.7
oder INPUT VAR1 1-4 VAR2 5-6 VAR3 7-10 .2 VAR4 $ 11-16 VAR5 17;
Eingelesen werden die numerischen Variablen VAR1 in den Spalten 1-4, VAR2 in den Spalten 5-6, VAR3 in den Spalten 7-10 mit zwei Dezimalstellen in den beiden rechten Spalten (9 und 10), die alphanumerische Variable VAR4 in den Spalten 11-16 und die numerische Variable VAR5 in der Spalte 17. Die spaltengebundene Eingabe bietet einige Variationsmöglichkeiten beim Einlesen der Daten: • Die Variablen können in beliebiger Reihenfolge eingelesen werden: INPUT VAR1 1-3 VAR2 21-25 VAR3 7-8 VAR4 30-33 VAR5 15-19 .1;
• Gleiche Spalten können mehrfach gelesen werden und die Werte unterschiedlichen Variablen zugeordnet werden: INPUT VAR1 $ 1-7 VAR2 8-9 KENN 1-9 KENN2 5-9;
18
• Alphanumerische Variablen können maximal die Länge 200 haben. • Alphanumerische Variablen dürfen Leerzeichen enthalten. • Fehlende Werte werden erkannt ('missing'), wenn sie durch Leerzeichen oder Punkt "." gekennzeichnet sind.
4.1.2.3 Formatierte Eingabe ('formatted input') Die formatierte Eingabe ermöglicht das Einlesen von Variablen in unterschiedlichen Formaten. Insbesondere ermöglicht sie die Benutzung gruppierter Format- und Variablenlisten. Die einfache Anweisung zum formatierten Einlesen hat die Form: INPUT variable_1 format [...[variable_n format]]; oder INPUT (variablenliste) (formatliste);
variable variablenliste format formatliste
Name der einzulesenden Variablen Liste einzulesender Variablen (in Klammern) SAS-Format für einzulesende Variable (abgeschlossen durch einen Punkt !) Liste von SAS-Formaten (in Klammern !). Formatangaben innerhalb der Liste können durch Leerzeichen oder Kommata voneinander getrennt werden.
In der einfachen Form der formatierten Eingabe muß die Reihenfolge der Variablennamen in der INPUT-Anweisung der Reihenfolge der Variablenwerte in den Daten entsprechen. Sprünge beim Einlesen sind nicht möglich (siehe spaltengebundene Eingabe). Durch die Kombination der formatierten Eingabe mit Zeigern (pointern) kann jedoch in jeder gewünschten Reihenfolge eingelesen werden (siehe weiter unten im Text). Beispiele: INPUT INPUT INPUT INPUT
(VAR1 VAR2 VAR3) (3. 3. 3.); (VAR1 VAR2 VAR3) (3.); (VAR1-VAR3) (3.); (VAR1-VAR3) (3*3.)
Alle vier Anweisungen sind äquivalent. Zu beachten ist die Möglichkeit der Benutzung eines Wiederholungsfaktors n*. Möglich sind gemischte Formatlisten: INPUT (VORN NAME VAR1-VAR5) (2*$20. 5*3.);
Achtung: INPUT (VAR1 VAR2) ($,5.);
liest VAR1 alphanumerisch und VAR2 fünfstellig numerisch ein aber: INPUT (VAR1 VAR2) ($ 5.)
ordnet beiden Variablen das Format $5. zu!
19
4.1.2.4 Verwendung von Zeigern (vereinfachte Darstellung) Beim Einlesen von Daten verwendet SAS generell Zeiger (pointer) für die eingelesenen Spalten (column pointer) und Zeilen (line pointer). In diesen Zeigern werden Informationen zur aktuellen Position des Systems während des Einlesens festgehalten. Es gibt Möglichkeiten, diese Zeiger direkt anzusprechen bzw. zu beeinflußen, um beim Einlesen von Daten beliebige Datenzeilen oder -spalten anzusprechen. Aus einer größeren Auswahl seien hier vier Möglichkeiten angesprochen:
@n +n
Spaltenzeiger
#n /
Zeilenzeiger
Zeigerspezifikationen müssen in der INPUT-Anweisung direkt vor den Namen der Variablen gesetzt werden, auf die sie sich beziehen sollen. Spaltenzeiger Ein Spaltenzeiger kann durch sog. 'column pointer controls' beeinflußt werden. Dabei wird die Leseposition innerhalb der Datenzeile auf bzw. um den angegebenen Wert verändert. @n
bewegt den Spaltenzeiger innerhalb der Zeile auf die Position n; n muß ganzzahlig positiv sein.
Beispiel: INPUT VAR1 $ @15 VAR2 3.;
liest vom Anfang des Datensatzes die Variable VAR1 ein, wechselt dann zur Position 15 des Datensatzes und liest von da an die Variable VAR2 dreistellig ganzzahlig ein. +n
bewegt den Spaltenzeiger um n Positionen nach rechts; n muß ganzzahlig positiv sein.
Beispiel: INPUT VAR1 $10. +3 VAR2;
liest am Anfang des Datensatzes die zehnstellige alphanumerische Variable VAR1 ein, geht danach um drei Positionen (Zeichen) weiter und liest die numerische Variable VAR2. Für die Verwendung von column pointer controls gilt: • Wird zusammen mit dem Zeichen "@" ein negativer Wert angegeben, so wird der Spaltenzeiger auf den Wert 1 gesetzt. • Der Spaltenzeiger kann in beide Richtungen der Datenzeile bewegt werden.
20
Beispiel: INPUT @20 VAR1 $10. @5 KENN;
beginnt in der Spalte 20 mit dem Einlesen der zehnstelligen alphanumerischen Variablen VAR1, springt dann zurück zur Spalte 5 des Datensatzes und liest dort die numerische Variable KENN ein. • Die Formen der INPUT-Anweisung können gemischt angewandt werden. Beispiel: INPUT NAME $ 1-20 @30 VAR1 5. +3 VAR2 $5. @21 VAR5;
Zeilenzeiger Zeilenzeiger enthalten Informationen über absolute Zeilennummern, aus denen Daten gelesen werden. Werden die Zeiger (mittels line pointer controls) beeinflußt, kann gezielt zu bestimmten Zeilen gesprungen werden. Line pointer controls müssen angewandt werden, wenn die Daten für eine Beobachtung mehrere Datenzeilen umfassen. #n
bewegt den Zeiger auf die Zeile n der Beobachtung. n muß ganzzahlig positiv sein.
Beispiel: INPUT VAR1 VAR2 #2 VAR3 $5. #3 VAR4 3. VAR5;
liest vom ersten Satz der Beobachtung die Variablen VAR1 und VAR2, vom zweiten Datensatz die Variable VAR3 und vom dritten die Variablen VAR4 und VAR5. /
setzt den Zeilenzeiger auf die Spalte 1 der nachfolgenden Zeile.
Beispiel: INPUT VAR1 VAR2 / VAR3 / VAR5;
liest vom ersten Datensatz die Variablen VAR1 und VAR2, vom zweiten (ab Spalte 1) die Variable VAR3 und vom dritten (ab Spalte 1) die Variable VAR5. Für die Verwendung von 'line pointer controls' gilt: • Das Schlüsselwort INPUT impliziert die Angabe #1, alle anderen Zeilen einer Beobachtung müssen gezielt angesprungen werden. • Die Anzahl Datensätze pro Beobachtung ergibt sich aus dem maximalen Wert von n. • Die Datensätze einer Beobachtung müssen nicht alle eingelesen werden; es können Sätze übersprungen werden. Beispiel: INPUT VAR1 #2 (VAR2-VAR5) (4*2.) #5 VAR25;
21
• Wird nur aus den Anfangssätzen gelesen und die Endsätze ausgelassen, muß mit #n die maximale Anzahl Sätze pro Beobachtung angezeigt werden. Beispiel: INPUT VAR1 #2 (VAR5-VAR7) (4.) #5;
• Die Sätze einer Beobachtung müssen nicht in numerischer Reihenfolge eingelesen werden. Rücksprünge sind möglich. Beispiel: INPUT VAR1 #3 VAR2 VAR3 #2 VAR11 #4 VAR51;
• Bei der Verwendung von / und einem Rücksprung mittels #n muß am Ende der INPUTAnweisung die maximale Anzahl Sätze pro Beobachtung angezeigt werden. Beispiel: INPUT VAR1 /VAR2 /VAR3 #1 @20 VAR4 #3;
4.1.2.5 Festhalten von Zeilen (line hold specifiers) Wie schon weiter oben erwähnt, steht in der Regel in den Datenzeilen ein physikalischer Satz oder ein Block von Datensätzen pro Beobachtung. Jede INPUT-Anweisung liest dann normalerweise im DATA-Step eine komplette Information pro Beobachtung (Einzelsatz oder Block von Sätzen) ein. Es gibt allerdings Situationen, in denen in den Rohdaten entweder mehrere physikalische Datensätze pro Beobachtung stehen, ohne daß sie als Block zu betrachten sind oder in einem physikalischen Datensatz Informationen zu mehreren Beobachtungen untergebracht sind. Um in diesen Spezialfällen Daten ohne Probleme einlesen zu können, bedient man sich im SAS einer speziellen Einlesetechnik über sog. line hold specifiers. Als Kennung für die line hold specifiers werden die Zeichen @ und @@ benutzt - im Unterschied zu deren Funktion als column pointer control jedoch nicht inmitten einer INPUT-Anweisung sondern an deren Ende. @ am Ende einer INPUT-Anweisung bewirkt, daß der Zeilenzeiger nach dem Einlesen einer Datenzeile auf der aktuellen Position verbleibt, bis eine (mehrere) weitere INPUTAnweisung(en) im gleichen DATA-Step ausgeführt werden. Besonders nützlich ist diese Einlesetechnik, wenn das Einlesen von Folgevariablen eines Datensatzes von den Werten zuvor eingelesener Variablen abhängig gemacht werden soll (und somit das Einlesen des kompletten Datensatzes nicht über eine einzige INPUT-Anweisung erfolgen kann).
22
Beispiel: In den auszuwertenden Datensätzen seien gemischt und ungeordnet entweder numerische oder alphanumerische Variablenwerte abgespeichert, der jeweilige Einzeldatensatz trägt jedoch am Satzanfang eine Kennung für numerischen (Zeilentyp A) oder alphanumerischen Inhalt (Zeilentyp B): CARDS; a 111 225 b BMW Opel a 224 228 b Ford Toyota b VW Porsche a 331 331 a 411 451 b Mitsubishi Seat ;
In Abhängigkeit vom Zeilentyp sollen die Variablen typengerecht eingelesen werden: DATA; INPUT TYPZ $ 1 @; IF TYPZ = ’a’ THEN INPUT WERT1 WERT2; IF TYPZ = ’b’ THEN INPUT NAME1 $ NAME2 $;
Mit der ersten INPUT-Anweisung wird der Zeilentyp (TYPZ) eingelesen und die Zeile durch das nachgestellte @-Zeichen in der Anweisung an der Einleseposition festgehalten. In Abhängigkeit vom Wert der Variablen TYPZ ( a oder b) wird anschließend über eine zweite oder dritte INPUT-Anweisung der Rest der Zeile entweder in der Form zweier numerischer oder zweier alphanumerischer Variablen eingelesen. @@ am Ende einer INPUT-Anweisung ermöglicht Einlesevorgänge für mehrere Beobachtungen in derselben Datenzeile (abweichend von Grundprinzip - pro Beobachtung eine Zeile). Eine Datenzeile wird erst dann freigegeben, wenn beim Einlesen ihr Ende erreicht ist. Diese Einlesetechnik wird insbesondere bei Datensätzen benutzt, die für eine Beobachtung nur wenige Variablen aufweisen und deshalb aus Platzgründen in den Daten in einem physikalischen Satz mehrere Beobachtungen untergebracht werden. Achtung: ⇒ Das nachgestellte @@ sollte nur bei list input verwendet werden ! Beispiel: DATA; INPUT NAME $ WERT @@; CARDS; Opel 111 BMW 225 Ford 224 Seat 331 Toyota 228 ;
Die Datenzeile dieses Beispiels enthält 5 Beobachtungen. Ist die Anzahl der Datenwerte in einer Datenzeile nicht ohne Rest durch die Anzahl definierter Variablen teilbar, gibt SAS eine Meldung (NOTE) im SAS-Log-File aus und liest die Daten des Falles mit dem fehlenden Wert nicht ein.
23
4.1.3 Instream-Daten - CARDS-Anweisung In bestimmten Situationen (Testzwecke, kleiner Datenumfang) werden SASProgrammanweisungen und Daten zusammen eingegeben. Es handelt sich in solchen Fällen um sog. 'instream-Daten'. Um dem System anzuzeigen, daß 'instream-Daten' vorliegen, wird eine CARDS-Anweisung verwendet. Sie hat die Form: CARDS;
Die CARDS-Anweisung ist die letzte Anweisung des DATA-Steps und muß unmittelbar vor den Datensätzen stehen. Ein DATA-Step darf nur eine CARDS-Anweisung enthalten. Daraus ergibt sich die folgende Programmstruktur: DATA EINGABE; INPUT ..........; . . SAS-Anweisungen zur Datenselektion und/oder Modifikation
. . CARDS; . . Datensätze
. . ;
Die Datensätze dürfen keine SAS-Anweisungen enthalten. Das Ende der Datensätze muß durch ein Semikolon ";" in der Spalte 1 einer gesonderten Zeile angezeigt werden. Nach der CARDS-Anweisung und den nachfolgenden Datensätzen darf nur ein neuer DATA-Step (beginnend mit dem Schlüsselword DATA) oder ein PROC-Step (Aufruf einer Prozedur) folgen; andere SAS-Anweisungen sind nicht zulässig. Die Datenzeilen der 'instream-Daten' dürfen nicht länger als 80 Zeichen sein (in manchen Systemen sogar nur 72). Bei größeren Datenmengen ist es umständlich und unhandlich, Daten innerhalb eines Programms zu halten, daher werden Rohdaten meistens in externen Dateien erfasst und dem SAS-Programm mittels entsprechender Anweisungen zur Verarbeitung übergeben.
24
4.1.4 Daten aus externen Dateien 4.1.4.1 Die INFILE-Anweisung Eine externe Datei, deren Daten nach der Beschreibung in der INPUT-Anweisung eingelesen werden sollen, kann über die INFILE-Anweisung identifiziert werden. Diese Anweisung muß vor der INPUT-Anweisung stehen. Sie hat die allgemeine Form: INFILE dateispezifikation [optionen];
dateispezifikation ‘dateiname’
ist die obligatorische Angabe des externen Dateinamens in der Form: vollständiger physikalischer Name der externen Datei. Der Name muß in Hochkommata eingeschlossen sein. Die Syntax der Angabe ist systemabhängig, daher sollten näher Angaben den entsprechenden Systemhandbüchern entnommen werden. Im SAS/PC (DOS-/ WINDOWS-Version von SAS) wird hier der vollständige DOSDateiname incl. Verzeichnispfad angegeben (UNIX analog),z.B.: INFILE 'C:\DATEN\AUSWERT\ROH.DAT'; (DOS) INFILE '/EXPORT/HOME/BEN2/DATEN.ROH.DAT';
fileref
(UNIX)
mnemonischer Name der externen Datei. Anwendbar nur, wenn vorher in einer FILENAME-Anweisung zugeordnet (s.weiter unten).
4.1.4.2 Die FILENAME-Anweisung Eine andere Möglichkeit der Identifikation einer externen Rohdatendatei ist die Kombination der INFILE-Anweisung mit der FILENAME-Anweisung. Die FILENAME-Anweisung hat die allgemeine Form: FILENAME fileref 'physikalischer Name';
fileref
ist ein mnemonischer Name (symbolischer Bezugsname) für die externe Datei. Er muß den SAS-Namenskonventionen genügen, d.h. max. 8 Zeichen lang, alphanumerisch beginnend, keine Sonderzeichen außer "_".
physikalischer name siehe 'dateiname' bei der INFILE-Anweisung Die FILENAME-Anweisung muß vor der INFILE-Anweisung stehen. Bei der genannten Kombination beider Anweisungen, wird in der FILENAME-Anweisung dem mnemonischen Namen der physikalische Name der externen Datei zugeordnet und in der INFILEAnweisung nur der mnemonische Name benutzt. Beispiel: DATA EING; FILENAME DAT1 'C\DATEN\ALLBUS88\ROH.DAT'; INFILE DAT1; INPUT ID 1-4 (GAST1-GAST4) (1.) .......
25
Optionen der INFILE-Anweisung (Auswahl):
DELIMITER = 'zeichen' DLM = 'zeichen' FIRSTOBS=n LINESIZE = m LS = m LRECL = n N=k OBS = n
definiert Zeichen (von blank verschieden) die als Trennzeichen zwischen Variablenverten in der Datei auftreten. gibt die Nummer (n) des Satzes an, mit dem das Einlesen begonnen werden soll (Voreingestellt 1). gibt die maximale Satzlänge an, mit der in der INPUTAnweisung gearbeitet werden soll. spezifiziert die logische Satzlänge (n) einer Datei. gibt die Anzahl (k) Sätze pro Beobachtung an (Voreingestellt 1) gibt die Nummer des letzten Satzes, der eingelesen werden soll, an.
4.1.5 Missing-Werte (Die MISSING-Anweisung) Fehlende Werte in den Rohdaten (missing values) können unterschiedlich gekennzeichnet werden: • Sind die Variablenwerte in den Rohdaten durch Leerzeichen (blanks) voneinander getrennt, werden fehlende Datenwerte durch einen Punkt (.) gekennzeichnet. Beispiel: DATA T1; INPUT VAR1 VAR2 VAR3; CARDS; 10 aaaa 111 20 bbbbb . . cc 33 40 . . 50 . 5515 ;
• Sind Daten spaltengebunden erfasst, werden fehlende Werte durch Leerzeichen gekennzeichnet. Dabei richtet sich die Anzahl der Leerzeichen nach der definierten Variablenlänge. Beispiel: DATA T1; INPUT VAR1 $ 1-3 VAR2 5-6 var3 8; CARDS; abc 12 3 21 3 def 5 xyz 4 ;
Enthalten die Daten nur numerische Werte, können über die MISSING-Anweisung Ersatzzeichen für Variablenwerte definiert werden, mit denen 'missings' gekennzeichnet werden können.
26
Die MISSING-Anweisung hat die allgemeine Form: MISSING zeichen_1 [...[zeichen_n]];
zeichen
ist das Zeichen zur Kenntlichmachung des missing-Wertes. Es können alle Buchstaben und der Unterstrich "_" benutzt werden.
Beispiel: DATA T1; MISSING n N; INPUT VAR1 VAR2; CARDS; 10 1 11 n 12 2 15 N ;
• Oft werden für missing-Werte numerischer Variablen keine Buchstaben oder Unterstriche, sondern numerische Werte außerhalb des Gültigkeitsbereichs des Variablenwertes angegeben z.B.: Zustimmungsgrade: 1:"stimme nicht zu" . 5:"stimme ganz zu", aber 7:"Angabe verweigert", 8:"Angabe entfällt", 9:"Frage ausgelassen".
Sollen beispielsweise die letzten drei Kategorien (7-9) als missing verarbeitet werden, müssen sie durch eine IF THEN-Anweisung ( s.weiter unten) dazu umkodiert werden: IF ZUST=7 OR ZUST=8 OR ZUST=9 THEN ZUST=.;
oder IF ZUST >= 7 THEN ZUST =.
27
4.2 Das SAS-Dateiensystem Die von SAS verarbeiteten Rohdaten werden für die Dauer der Verarbeitung in eine SystemArbeitsdatei übernommen. Die Übernahme geschieht nach der Beschreibung des Benutzers in der INPUT-Anweisung. Alle Datenmanipulationen finden auf den Arbeitsdateien statt, die Original-Rohdaten bleiben unverändert bestehen. Normalerweise stehen derartige Arbeitsdateien nur für die Dauer des Programmlaufs zur Verfügung, es sei denn, sie werden im Programm implizit als permanent deklariert. Die Entscheidung, ob eine SAS-Systemdatei (SAS-Datei) permanent oder temporär angelegt wird, hängt von der Benennung dieser Datei ab. Nachfolgend wird die implizite Vorgehensweise genauer erklärt.
4.2.1 Temporäre Dateien Die Generierung einer temporären Arbeitsdatei wird im DATA-Step mittels der DATAAnweisung bewirkt. Jedes SAS-Programm muß mindestens einen DATA-Step und somit auch eine DATA-Anweisung enthalten. Die Anweisungssyntax wurde schon im Abschnitt 5.1.1 beschrieben. In dieser Anweisung ist es insbesondere zulässig, einstufige Namen für SAS-Dateien zu benutzen. In solchen Fällen wird nur Dateiname angegeben, was zur Folge hat, daß die SAS-Datei unter dem angegebenen Namen als temporäres Mitglied (Member) einer SASBibliothek WORK zugeordnet, angelegt, benutzt und nach Programmende gelöscht wird. Beispiele: DATA AUSW1; . . weitere Anweisungen
. DATA AUSW2; .
bewirkt die Generierung zweier temporärer SAS-Dateien AUSW1 und AUSW2 als Member der SAS-Bibliothek WORK (WORK.AUSW1, WORK.AUSW2). DATA; . weitere Anweisungen
. DATA; .
bewirkt die Generierung zweier temporärer SAS-Dateien DATA1 und DATA2 (nach der DATAn-Regel - WORK.DATA1, WORK.DATA2).
28
4.2.2 Permanente Dateien (SAS-Systemfiles) Die bisher beschriebenen, mittels der DATA-Anweisung generierten SAS-Dateien, sind temporärer Natur, d.h. nach Ablauf des Programms, in dem sie generiert wurden, stehen sie nicht mehr zur Verfügung. Da jedoch in solchen Dateien nicht nur die Werte der eingelesenen Variablen sondern evtl. auch die Ergebnisse aller Selektions- und Modifikationsanweisungen enthalten sind, wäre es durchaus sinnvoll, den Inhalt dieser Dateien für eventuelle spätere Anwendungen (Auswertungen) zu retten. Außerdem unterscheiden sich diese Dateien wesentlich von den Rohdatendateien - es sind SASSystemdateien, deren Verarbeitung wesentlich schneller vonstatten geht und die Wiederholung vieler Programmschritte (Labeln von Variablen und ihren Ausprägungen, Berechnen neuer Variablen, Variablenselektion, Anwendung von Funktionen usw.) vor den Auswertungen überflüssig macht. Eine permanente Speicherung ist in permanenten Systemdateien (Systembibliotheken) möglich. Für die Generierung und Benennung solcher Bibliotheken gilt generell folgendes: • Ein SAS-Dateiname für eine permanente Systemdatei besteht grundsätzlich aus zwei, durch einen Punkt voneinander getrennten, Teilen (zweistufiger Name): libref.dateiname
♦ libref ('library reference') ist der logische Name einer SAS-Bibliothek ('SAS data library'), zu der die Datei gehört. ♦ dateiname ist der Dateiname im engeren Sinne, der die Datei als Member der im libref genannten Bibliothek bezeichnet. • Wird für eine SAS-Systemdatei ein einstufiger Name verwendet (siehe DATA-Anweisung), so wird dieser intern zwar in einen zweistufigen umgewandelt, allerdings auch intern als temporär gekennzeichnet. • Wird in der DATA-Anweisung für den Dateinamen ein zweistufiger Name angegeben, so erwartet das System eine permanente SAS-Systemdatei, wobei die Bibliothek, in der sie angelegt werden soll oder schon vorhanden ist, über eine LIBNAME-Anweisung vorher spezifiziert werden muß. Diese Anweisung hat die allgemeine Form: LIBNAME libref 'physikalischer name';
libref
ist der symbolische Bezugsname (mnemonischer Name) der Bibliothek. Er muß den SAS-Namenskonventionen genügen.
'physikalischer name' gibt an, unter welchem Namen die Bibliothek dem Betriebssystem bekannt ist. Die Syntax ist rechnerabhängig, auf DOS- und UNIX-Rechnern ist es der Name eines Verzeichnisses, in dem die Systemlibrary angelegt werden soll oder schon existiert. Der Name muß in Hochkommata eingeschlossen werden.
29
Beispiel: FILENAME ROHDAT 'C:\DATEN\AWERTE\ROH.DAT'; LIBNAME AUSW 'C:\DATEN\AUSWERT\'; DATA AUSW.TEIL1; INFILE ROHDAT; INPUT ID 1-4 (GAST1-GAST3) (1.); . weitere Anweisungen
. DATA AUSW.TEIL2; INFILE ROHDAT; INPUT ID 1-4 GAST1 1. +2 GAST4 1.;
bewirkt die Generierung zweier permanenter SAS-Dateien AUSW.TEIL1 und AUSW.TEIL2 in einer SAS-Bibliothek mit dem logischen Namen AUSW, die das Betriebssystem unter C:\DATEN\AUSWERT findet. In beide Dateien werden Daten einer externen Rohdatendatei ROH.DAT nach den unterschiedlichen Beschreibungen in den INPUT-Anweisungen eingelesen. • In einem SAS-Programm können mehrere permanente SAS-Dateien in unterschiedlichen Bibliotheken angelegt bzw. vorhandene angesprochen werden, wenn diese vorher mittels LIBNAME-Anweisung definiert wurden. Beispiel: LIBNAME BIB1 'C:\DATEN\TEIL1\'; LIBNAME BIB2 'C:\DATEN\TEIL2\'; DATA BIB2.AUSW1; . . weitere Anweisungen . DATA BIB1.AUSW5;
bewirkt den Zugriff auf die permanente SAS-Datei BIB2.AUSW1 in der Bibliothek BIB2 (in C:\DATEN\TEIL1) und die Datei BIB1.AUSW5 (ebenfalls permanent) in der Bibliothek BIB1 (in C:\DATEN\TEIL2).
30
4.3 Datenmodifikation
4.3.1 Bildung neuer Variablen, Wertzuweisung Eingelesene Variablenwerte können durch eine Reihe von SAS-Anweisungen verändert werden oder es können im SAS-Datensatz neue Variablen generiert werden. Solche Modifikationsanweisungen müssen im SAS-Programm immer im DATA-Step nach der INPUT-Anweisung stehen. Für das Verändern von Variablenwerten bzw. Hinzufügen neuer Variablen steht im SAS eine Reihe von Operatoren zur Verfügung: • Arithmetische Operatoren. • Vergleichsoperatoren (siehe IF-Anweisungen). • Logische Operatoren (siehe IF-Anweisungen). Eine Vielzahl von SAS-Funktionen ergänzt das Instrumentarium zur Variablenbehandlung. Werteveränderungen von Variablen und die Bildung neuer Variablen ergeben sich im SAS als Ergebnisse von Zuweisungsoperationen (assigment statements) mit der allgemeinen Form: ergebnisvariable = ausdruck;
Diese Anweisung beginnt im Unterschied zu anderen SAS-Anweisungen nicht mit einem anweisungsspezifischen Schlüsselwort.
ergebnisvariable
ausdruck
eine Variable, der der Wert von ausdruck zugewiesen wird. Es kann eine bereits definierte oder eine neue Variable sein. Auch SAS-Systemvariablen (_N_ oder _ERROR_ u.a.) können verwendet werden. ein gültiger SAS-Ausdruck, bestehend aus einem oder mehreren durch Operatoren verbundenen Operanden. Eindeutigkeiten der Verarbeitungsreihenfolge können ggf. durch Klammerungen erreicht werden.
In Zuweisungsoperationen werden meistens arithmetische Operatoren benutzt: Operator + / * **
Addition Subtraktion Division Multiplikation Exponentiation
Beispiel V1 = V22 + Z1; WERT1 = V2 - VAR7; V2 = WERT1 / WERT3; ERG = Z21 * Z1; Y = X ** 3;
Zusätzlich bietet SAS eine große Menge an integrierten Funktionen für Anwendungen aus vielen Statistik-, Mathematik- und anderen Bereichen. An dieser Stelle sei nur eine minimale Auswahl vorgestellt, um insbesondere die Verwendung in Programmanweisungen zu demonstrieren, ansonsten sei bezüglich Auswahl und Verwendung auf die Sekundärliteratur verwiesen:
31
Funktion ABS COS EXP INT LOG LOG10 MEAN ROUND SIN SQRT TAN
Absolutbetrag Cosinus Exponentialfunktion Integerbildung natürlicher Logarithmus dekadischer Logarithmus Mittelwert Auf- bzw. Abrunden Sinus Quadratwurzel Tangens
Beispiel X = ABS(X); Y = COS(X); x Y = EXP(X); entspricht e X = INT(X); XE = LOG(V1); X10 = LOG10(V1); GES = MEAN(V1,V2,V3,V5); V2 = ROUND(X); Z = SIN(X); Z = SQRT(X); Z = TAN(X);
In Zuweisungsoperationen sind selbstverständlich auch Kombinationen von Operatoren und Funktionen möglich: SUMM_END = SU1 + SU2 + INT(SU3); ALTGR = INT(ALTER / 10); Y = SQRT(ROUND((A + B / 2) * (X ** 2 - 1)));
Die arithmetischen Operatoren werden nach den arithmetischen Vorrangregeln abgearbeitet (Punkt vor Strich), die Abarbeitungsreihenfolge kann jedoch durch geeignete Klammerung beeinflußt werden; Klammern werden von links nach rechts abgearbeitet.
4.4 Datenselektion Bei der Verarbeitung bestehender Dateien besteht oft die Notwendigkeit, nicht alle zur Verfügung stehenden Datensätze zu verarbeiten, sondern nur eine Untermenge. Dies kann sowohl beim Testen eines Programms zweckmäßig sein als auch bei manchen Analysen und Fragestellungen, bei denen es sinnvoll ist, nur Beobachtungen, die bestimmte Voraussetzungen erfüllen, auszuwählen (z.B. nur weibliche Probanden, bestimmte Altersgruppen u.s.w.). Das SAS-System bietet mehrere Möglichkeiten, Beobachtungen gezielt aus einer Datei auszuwählen: • • • • • •
Dateioptionen FIRSTOBS= und OBS= FIRSTOBS- und OBS-Option der INFILE-Anweisung "subsetting-IF" IF in Verbindung mit der DELETE-Anweisung WHERE-Anweisung WHERE-Dateioption
32
4.4.1 Auswahl von Beobachtungen über die FIRSTOBS- und OBS-Option Sollen Beobachtungen einer SAS-Datei verarbeitet werden, indem ab einer bestimmten Beobachtungsnummer und/oder bis zu einer bestimmten Beobachtungsnummer ausgewertet werden soll, können die FIRSTOBS=- und/oder OBS=-Dateioptionen verwendet werden. Mit Beobachtungsnummer ist hier die relative Position einer Beobachtung in der SAS-Datei gemeint. Zur der Beobachtung können dabei mehrere physikalische Datensätze gehören. Mit der FIRSOBS=-Option wird die Nummer der Beobachtung angegeben, mit der die Verarbeitung beginnen soll, mit OBS= die Nummer der letzten zu berücksichtigenden Beobachtung. Bei der Angabe können beide Optionen oder eine von beiden spezifiziert werden. Die Optionenangabe ist in Klammern hinter den Dateinamen zu setzen: DATA E2; SET E1 (FIRSTOBS=20 OBS=40);
bedeutet, daß aus der Datei E1 21 Beobachtungen in die Datei E2 übernommen werden, beginnend mit der 20. Beobachtung und endend mit der 40. . Ist die zu verarbeitende Datei eine externe Datei (keine SAS-Systemdatei), die über die INFILE-Anweisung eingelesen werden soll, können analog die FIRSTOBS- und/oder die OBS-Option der INFILE-Anweisung verwendet werden: FILENAME DATEN '........'; DATA NEU; INFILE DATEN OBS=50; INPUT .....;
liest aus der Datei mit dem Fileref DATEN die Beobachtungen bis zur Beobachtungsnummer 50 in die SAS-Datei NEU ein. Hinweis: Die FIRSTOBS- und die OBS-Dateioptionen beziehen sich auf die Nummer der ersten und letzten Beobachtung (mehrere physikalische Sätze pro Beobachtung möglich!). Dagegen beziehen sich die FIRSTOBS- und OBS-Optionen der INFILE-Anweisung auf die erste und letzte Nummer des einzulesenden physikalischen Datensatzes. Enthält eine Beobachtung mehrere Datensätze, ist es bei der Spezifikation der Optionswerte entsprechend zu berücksichtigen. Gehören beispielsweise in einer externen Datei zu einer Beobachtung 2 Sätze und sollen Daten von der 5. bis zur 50. Beobachtung eingelesen werden, müßte in der INFILE-Anweisung FIRSTOBS=9 und OBS=100 spezifiziert werden.
4.4.2 IF-THEN-ELSE-Strukturen Soll eine Anweisung oder Anweisungsgruppe in Abhängigkeit von einer Bedingung ausgeführt werden, ist es mittels einer IF-THEN-ELSE-Konstruktion zu realisieren. Die dazugehörige Anweisung hat die folgende allgemeine Form: IF ausdruck THEN anweisung_1; [ELSE anweisung_2;]
In Abhängigkeit von der Bedingung im ausdruck wird anweisung_1 ausgeführt. In einem optionalen ELSE-Zweig kann noch eine alternative Anweisung definiert werden, die nur dann auszuführen ist, wenn die Bedingung im ausdruck nicht erfüllt ist. Die IF-Anweisung wird sukzessiv für alle eingelesenen Beobachtungen abgearbeitet.
33
Die IF-THEN-ELSE-Anweisung wird im DATA-Step verwendet unabhängig davon, ob Daten für die Beobachtung INFILE/INPUT aus einer externen Datei eingelesen werden sollen, über INPUT/CARDS instream-Daten übernommen werden oder ob es sich bei der zu verarbeitenden Datei um eine schon bestehende SAS-Datei handelt.
ausdruck
ist ein gültiger SAS-Ausdruck (s. Abschnitt 5.3), der ausgewertet wird und als Ergebnis einen Wert 0, ungleich 0 oder 'missing' liefert. Ist der Wert gleich 0 (Bedingung erfüllt), wird die Anweisung hinter THEN ausgeführt; ist der Wert ungleich 0 oder 'missing' (Bedingung nicht erfüllt), wird die THEN-Anweisung nicht erfüllt. In solchen Fällen wird die Anweisung des ELSE-Zweiges ausgeführt (soweit vorhanden).
anweisung
ist jede ausführbare SAS-Anweisung, die im DATA-Step benutzt werden darf.
Die IF-Bedingung kann aus einem einfachen Vergleich zwischen einer Variablen und einem Zahlenwert bestehen: IF S13 > 5 THEN.....;
oder dem Vergleich von Variablenwerten: IF SUMME1 > SUMME5 THEN ......;
Sie kann mehrere, durch die Operatoren AND und/oder OR verknüpfte Vergleichsoperationen einbeziehen: IF S5 > 7 and S16 < 5 THEN .......; IF IF F8P10 < 4 OR F8P10 =8 THEN ......;
Zur Bildung von Relationen kann auf eine Reihe von Vergleichsoperatoren zugegriffen werden: EQ NE GT GE
oder oder oder oder
LT LE NL IN
oder oder
= ^= > >= ^> < <= ^<
equal not equal greater then greater equal not greater less than less equal not less
gleich ungleich größer als größer gleich nicht größer kleiner als kleiner gleich nicht kleiner gleich einem Listenelement
Sollen Relationen in geschachtelter Form definiert werden, stehen die beiden logischen Operatoren AND und OR, die zusätzlich durch NOT verneint werden können, zur Verfügung: AND OR NOT
oder oder oder
& | ^
und oder nicht
Beispiele: 1) IF F6P5 = 99 THEN FEHLER1 = 1; Hat die Variable F6P5 der Wert 99, wird die Variable FEHLER1 auf den Wert 1 gesetzt.
34
2) IF S1 = 1 THEN GESCHL='Mann'; Hat die Variable S1 den Wert 1, erhält die Variable GESCHL als Wert die Zeichenkette "Mann". 3) IF S1 = 1 THEN GESCHL = 'Mann'; ELSE GESCHL = 'Frau';
Hat S1 den Wert 1, erhält GESCHL den Wert "Mann" sonst (bei allen von 1 verschiedenen Werten) erhält GESCHL den Wert "Frau" zugewiesen. Hinweis: Vor solchen Wertzuweisungen ist sicherzustellen, daß die angesprochenenen Variablen plausible Werte enthalten (missings beachten !) - im obigen Beispiel dürfte die Variable S1 nur die Werte 1 und 2 haben. Ist dies nicht der Fall, ist dafür zu sorgen, daß keine falschen Codierungen entstehen. Im Falle der Variablen S1 aus dem obigen Beispiel wäre es durch die folgende Anweisungsgruppe möglich: IF S1 = 1 THEN GESCHL = 'Mann'; ELSE IF S1 = 2 THEN GESCHL = 'Frau'; ELSE GESCHL = 'fehl';
Bei verschachtelten Vergleichs- und logischen Operatoren ist sehr oft Vorsicht geboten, insbesondere wenn mit Verneinungen gearbeitet wird. Die durchaus mögliche gemischte Schreibweise der Operatoren (z.B. NE oder ^=) macht manchmal eine IF-Konstruktion recht unübersichtlich, wie das folgende Beispiel zeigt: IF (VAR1 < B) & NOT ((VAR3 = VAR4) | (VAR5 - VAR6) >= 7) THEN VAR1 = VAR4 + 7;
Bei Abfragen, in denen eine Variable bestimmte Werte einer Liste aufweisen soll, können mit OR verbundene Ausdrücke oder der IN-Operator im IF-Ausdruck verwendet werden: IF ORT EQ 'Berlin' OR ORT EQ 'Bonn' OR ORT EQ 'Köln' THEN .....;
oder alternativ: IF ORT IN ('Berlin','Bonn';'Köln') THEN .......;
Neben der oben beschriebenen IF-THEN-ELSE-Anweisung gibt es noch die 'subsetting'-IFAnweisung zur Auswahl von Beobachtungen, die weiter unten beschrieben wird.
35
4.4.3 Selektierendes IF ("subsetting-IF") Sollen aus einer bestehenden SAS-Datei Beobachtungen in eine Teildatei übernommen werden, die einer bestimmten Bedingung genügen,oder solen beim Einlesen von Rohdaten nur Sätze eingelesen werden, die eine bestimmte Bedingung erfüllen, kann es mittels eines "subsetting-IF" realisiert werden. Die Bedingung wird in einer IF-Schleife (ohne ELSE-Zweig) definiert. Die "subsetting-IF"-Anweisung hat die allgemeine Form: IF ausdruck;
ausdruck
spezifiziert die Auswahlbedingung und kann unterschiedliche Formen haben:
• Angabe eines Variablenwertes DATA MANN; SET GESAMT; IF S1 = 1;
wählt aus der Gesamtheit der Daten die Sätze, für die die Variable S1 den Wert 1 hat (z.B. männliche Untersuchungspersonen, wenn „1“ in der Geschlechtsvariablen S1 für „männlich“ steht). • Komplexere Form: DATA AUS; SET EIN; IF (V1 + V2) > 25;
wählt nur Sätze, für die die Summe der Variablen V1 und V2 größer als 25 ist, aus. • Logische Verknüpfungen (AND, OR) oder Verneinungen (NOT, NE): IF IF IF IF
(S1 (S5 NOT (S2
EQ 1) AND (S2 EQ 5); NE 9) OR (S4 NE 9); (F13A17 LE 1); < 5) AND ((S4 = 4) OR 0 < S13 <= 4));
Ist die im ausdruck angegebene Bedingung erfüllt, wird die Beobachtung in die (Teil)-Datei übernommen und eventuelle nachfolgende Anweisungen des DATA-Steps auf der Beobachtung ausgeführt; ist die Bedingung nicht erfüllt, wird die Beobachtung nicht übernommen, das System springt zurück zum Beginn des DATA-Steps und liest die nächste Beobachtung ein. Bei Verneinungen (NOT oder NE) ist die Behandlung fehlender Werte zu beachten. Fehlen beispielsweise in der Variablen S1 (Geschlecht, mit den Werten "1" für "Mann" und "2" für "Frau") bei einigen Beobachtungen die Werte, so hat die Bedingung: IF S1 NE 1;
zur Folge, daß alle Sätze weiblicher Probanden und alle Sätze mit fehlenden Werten der Variablen S1 ausgewählt werden. Wollte man es ausschliessen, müßte man IF (S1 NE 1) AND (S1 NE .);
kodieren oder im Falle gerade dieser Variablen (zweistufig) viel einfacher: IF S1 EQ 2;
36
Ähnlich verhält es sich bei falschen Codierungen: IF S1 NE 1;
wählt alle Sätze aus, für die S1 nicht den Wert 1 hat, also neben den o.g. Missings beispielsweise auch Sätze mit S1 = 0 oder S1 > 1. Wurden die Datensätze vorher bereinigt, so daß man sicher sein kann, daß sie nur richtige Codierungen enthalten, müssen bei Verneinungen nur, wie schon oben erwähnt, die missing-Werte beachtet werden.
4.4.4 Die DELETE-Anweisung Sollen in einer bestehenden Datei (SAS-Datei oder externe Datei) bestimmte Beobachtungen von der Auswertung ausgeschlossen und nicht in eine neue SAS-Teildatei oder die aus der externen Rohdatendatei zu erstellende SAS-Datei übernommen werden, kann dies auch mit Hilfe der DELETE-Anweisung erreicht werden. Die DELETE-Anweisung hat die allgemeine Form: DELETE;
Sie bewirkt, daß die Verarbeitung der Anweisungen des DATA-Steps für die aktuell bearbeitete Beobachtung abgebrochen und die Beobachtung nicht übernommen wird. Das System springt zur Bearbeitung der nächsten Beobachtung an den Anfang des DATA-Steps zurück. Die DELETE-Anweisung wird als THEN-Zweig einer mit einer Bedingung versehenen IF-Anweisung benutzt: IF ausdruck THEN DELETE;
ausdruck
ist eine Bedingung, bei deren Gültigkeit eine Beobachtung nicht in die Datei übernommen werden soll.
Beispiel: IF (S1 = .) AND (0 < S11 > 97) THEN DELETE;
schließt alle Beobachtungen aus, die eine fehlende Angabe bei S1 haben und bei denen der Wert von S11 höher ist als 0 und kleiner als 97 ist. Ob bei der Auswahl von Beobachtungen das subsetting-IF oder die Form IF-THEN-ELSE gewählt wird, ist von der Frage abhängig, in welcher der beiden Formen die Auswahlbedingung am einfachsten zu formulieren ist. Analog zum subsetting-IF ist die Behandlung fehlender Werte und falscher Kodierungen besonders zu beachten: IF S1 NE 1 THEN DELETE;
liefert mit der DELETE-Anweisung ein anderes Ergebnis als im subsetting-IF - hier werden tatsächlich nur Sätze mit dem Wert 1 der Variablen S1 übernommen, beim subsetting-IF (ohne DELETE) wären alle von 1 verschiedenen Werte berücksichtigt und auch die Sätze mit Missings und falschen Codierungen übernommen worden.
37
4.4.5 Die WHERE-Anweisung Während die subsetting-IF-Anweisung nur die Auswahl von Beobachtungen innerhalb des DATA-Steps zuläßt, ist es mit Hilfe der WHERE-Anweisung möglich, sowohl im DATA- als auch im PROC-Step Selektionen durchzuführen. Die WHERE-Anweisung hat die allgemeine Form: WHERE ausdruck;
ausdruck
ist ein aus arithmetischen und/oder logischen Operanden und Operatoren gebildetes Selektionskriterium, welches auch zusätzliche WHERE-spezifische Operatoren enthalten kann.
Die WHERE-Anweisung gehört nicht zu den ausführbaren (executable) Anweisungen und darf daher nicht im ELSE-Zweig einer IF-THEN-Anweisung verwendet werden. Sie darf nur auf SAS-Dateien angewandt werden (nicht für die Selektion von Datensätzen externer Dateien anwendbar). Sie darf ebenfalls nicht zusammen mit Anweisungen, die sich auf die Beobachtungsnummer beziehen, angewandt werden (FIRSTOBS=, OBS=). Bei ihrer Verwendung wird vom System immer FIRSTOBS=1 angenommen. Beispiele: WHERE S11 > 50; DATA ZWEI; SET GESAMT; WHERE F1G1 = 7 AND S1 = 2; PROC PRINT; WHERE NAME='Müller';
Als Operanden der WHERE-Anweisung können auch isoliert stehende Variablennamen benutzt werden: WHERE S6; DATA AUSW; SET GESAMT; WHERE S9 AND S17;
Dabei gilt bei numerischen Variablen die Bedingung als "wahr", wenn die genannte Variable einen nicht fehlenden Wert ungleich 0 hat; " falsch" gilt für Variablenwerte 0 und fehlende Werte. Bei alphanumerischen Variablen gilt "wahr" für von blank verschiedene Werte, " falsch" für durch Leerzeichen gekennzeichnete missings. Die WHERE-Anweisung kann alle im SAS gültigen logischen, arithmetischen und Vergleichsoperatoren enthalten. Die Verwendung von SAS-Funktionen ist nicht erlaubt. Zusätzlich gibt es eine Reihe WHERE-spezifischer Operatoren, die nur in dieser Anweisung benutzt werden dürfen: IS NULL | IS MISSING
für die Auswahl aller Beobachtungen (numerisch oder alphanumerisch), deren Variablenwert missing ist: WHERE S1 IS
MISSING;
38
wählt alle Beobachtungen mit fehlendem Wert bei S1 aus. BETWEEN WERT1 AND WERT2;
für die Auswahl von Werten innerhalb definierter Grenzen WERT1 und WERT2. WHERE S13 BETWEEN 9 AND 12;
wählt Beobachtungen mit S13 zwischen 9 und 12 aus. Für Zeichenvariablen stehen zusätzliche Operatoren zur Verfügung:
CONTAINS | ? für die Auswahl von Beobachtungen, deren Zeichenvariablen eine spezifizierte Zeichenkette enthalten. Die Position der Zeichenkette im Variablenwert ist beliebig; es wird zwischen Groß- und Kleinschreibung unterschieden. WHERE NAME ? 'mei'; wählt Datensätze aus, in denen die Variable NAME die Zeichenkette "mei" enthält z.B. Vormeier, Turnmeiner, Gemeiner; der Name "Meibach" wird aber beispielsweise nicht auswählt (wegen Groß/Kleinschreibung). LIKE
für die Auswahl von Beobachtungen in denen Werte von alphanumerischen Variablen mit einem vorgegebenen Muster übereinstimmen. Für die Definition des Musters stehen zwei Ersatzzeichen (Joker) zur Verfügung - das Prozentzeichen (%) und der Unterstrich (_). % steht dabei für eine beliebige Fortsetzung, der Unterstrich gilt als Ersatz für einzelne Zeichen. Im definierten Muster wird nach Groß- und Kleinschreibung unterschieden.
WHERE NAME LIKE 'S%' wählt Beobachtungen aus, in denen die Variable NAME eine mit S (groß !) beginnende und beliebig fortgesetzte Zeichenkette enthält. WHERE NAME LIKE 'H_u_' wählt Beobachtungen aus, die in der Variablen NAME eine vierstellige Kette enthalten, welche mit H beginnt, das zweite Zeichen ist beliebig, das dritte Zeichen ist ein "u" und das vierte wiederum beliebig. WHERE NAME LIKE 'D_r__m%' wählt Beobachtungen aus, in denen der Wert der Variablen NAME mit "D" beginnt, das zweite Zeichen ist beliebig, das dritte ein "r", die folgenden zwei beliebig, das sechste ist "m" und der Rest der Zeichenkette (Fortsetzung) beliebig. =*
wählt phonetisch ähnliche Zeichenketten nach dem Soundex-Algorithmus aus. Da dieser jedoch scheinbar auf amerikanische Sprachverhältnisse zugeschnitten ist, funktioniert er im deutschen Sprachbereich zum Teil nicht richtig oder liefert mindestens unvorhergesehene Ergebnisse.
WHERE NAME =* 'Meier' würde beispielsweise alle Beobachtungen auswählen, in denen die Variable NAME eine Zeichenkette enthält, die phonetische Ähnlichkeit mit der angegebenen Vergleichskette ("Meier") hat, also z.B. Meier, Meyer, Maier.
39
SAME AND
erlaubt das Erweitern einer WHERE-Anweisung: WHERE bedingung_1; . SAS-Anweisungen
. WHERE SAME AND bedingung_2; . SAS-Anweisungen
. WHERE SAME AND bedingung_n; .
Die bedingung_1 wird durch die erste SAME AND-Konstruktion um die bedingung_2 erweitert, die erweiterte Bedingung durch die nächste SAME AND-Konstruktion und bedingung_3 u.s.w. bis zur bedingung_n. Achtung: Die o.g. 3 Operatoren für Zeichenvariablen und der SAME AND_Operator stehen in den älteren PC-Versionen von SAS nicht zur Verfügung. Statt der WHERE-Anweisung kann auch die analoge WHERE=-Dateioption verwendet werden. Sie wird in Klammern hinter den dazugehörigen Dateinamen gesetzt: DATA AUS2; SET D1 (WHERE= (S1 = 1)) D2 (WHERE= (F8P10 = 1));
In die Datei AUS2 werden aus der Datei D1 nur Beobachtungen mit S1=1 und aus der Datei D2 nur Beobachtungen, bei denen die Variable F8P10 den Wert 1 hat, übernommen.
4.4.6 Bildung von Subfiles - SET-Anweisung Zur Erinnerung: SAS liest alle zu verarbeitenden Datensätze, unabhängig davon, ob sie über die Kombination INFILE-INPUT (externe Daten) oder CARDS-INPUT (instream-Daten s.Abschnitt 5.1.2) eingelesen werden in eine eigene System-Arbeitsdatei (SAS-Datei), deren Name am Beginn des DATA-Steps spezifiziert wird, ein: DATA EIN; INFILE DATEN '........'; INPUT ......;
oder INFILE DATEN '........'; DATA EIN; INPUT ........;
40
oder DATA EIN; INPUT ..........; CARDS; . . ;
In allen drei Fällen werden die Rohdaten in eine SAS-Datei namens EIN eingelesen. Über Selektionsanweisungen (s.o.) kann die Auswahl der einzulesenden Datensätze definiert werden. Mit Hilfe der SET-Anweisung können Beobachtungen aus existierenden SAS-Dateien gelesen und an andere SAS-Dateien übergeben oder angefügt werden. Über die SETAnweisung werden standardmäßig alle Beobachtungen und alle Variablen einer SAS-Datei übernommen, es sei denn, die Anzahl wird durch entsprechende Optionen oder Anweisungen eingeschränkt. Die SET-Anweisung kann u.a. benutzt werden, um: • Den Inhalt einer Datei an eine andere zu übergeben, wobei evtl. Selektionen den Umfang der übergebenen Daten einschränken können. • Mehrere Dateien miteinander zu verketten. • Dateien in sortierter Reihenfolge zu verketten. In einem DATA-Step können mehrere SET-Anweisungen benutzt werden. Die SET-Anweisung hat die allgemeine Form: SET datei_1 [(dateioptionen)] [datei_2 [(dateioptionen)]] [...[datei_n [(dateioptionen)]]];
datei
ist der Name einer SAS-Datei, deren Inhalt übertragen werden soll. Sie kann temporär oder permanent sein (s. SAS-Dateisystem). In Abhängigkeit von der Art sind entsprechende Namenskonventionen zu beachten.
Beispiel: DATA AUSW1; SET GESAMT;
Die Datei AUSW1 wird mit dem kompletten Inhalt der Datei GESAMT belegt (alle Beobachtungen und alle Variablen - Datei wird kopiert). DATA MANN; SET GESAMT; IF S1 = 1; . . SAS-Anweisungen
. DATA FRAU; SET GESAMT; IF S1 = 2; . . SAS-Anweisungen
41
Hier werden zwei neue SAS-Dateien erzeugt - MANN und FRAU. Beide werden mit Inhalten der Datei GESAMT belegt, allerdings die Datei MANN nur mit Beobachtungen, für die die Variable S1 den Wert 1 hat und die Datei Frau mit Beobachtungen mit S1 = 2. Beide Dateien haben den kompletten Variablensatz der Datei gesamt, allerdings die erste (MANN) nur für "männliche" Beobachtungen und die zweite (FRAU) nur für die "weiblichen". Auf beiden Dateien können anschließend unterschiedliche SAS-Anweisungen ausgeführt werden. DATA MANN; SET GESAMT; WHERE S1 = 1; DATA FRAU; SET GESAMT; WHERE S1 = 2;
wie oben, jedoch mit der WHERE-Anweisung.
dateioptionen sind Optionen, mit deren Hilfe u.a. Beobachtungen und/oder Variablen ausgewählt werden können (DROP=, KEEP= (s.u.); WHERE, FIRSTOBS=, OBS= (s.o.)). Sie müssen in Klammern hinter dem dazugehörigen Dateinamen gesetzt werden. DATA AUSW2; SET MANN (OBS=20); DATA AUSW3; SET FRAU (FIRSTOBS=50 OBS=20);
Die SAS-Datei AUSW2 erhält 20 Beobachtungen der Datei MANN, mit der ersten beginnend; die Datei AUSW3 erhält 20 Beobachtungen der Datei FRAU, allerdings mit der 50. Beobachtung beginnend.
4.4.6.1 Verknüpfen von Teildateien Werden in der SET-Anweisung mehrere Dateinamen nacheinander genannt, so werden die entsprechenden Dateien in der Zieldatei hintereinander gesetzt. Die Reihenfolge der Nennung entscheidet über die Reihenfolge der Verkettung. Werden keine Auswahlbedingungen definiert, ist die Anzahl der Beobachtungen der aus der Verkettung resultierenden Datei gleich der Summe der Beobachtungen der verketteten Dateien. DATA GESAMT; SET DAT1 DAT2 DAT3;
Die Datei GESAMT enthält die Beobachtungen von DAT1, dahinter die von DAT2, gefolgt von Beobachtungen der Datei DAT3. DATA GESAMT; SET DAT3 DAT1 DAT2;
Die Datei GESAMT enthält die Beobachtungen von DAT3, dahinter die von DAT1, gefolgt von den Beobachtungen der Datei DAT2. Achtung: Enthalten die zu verketteten Dateien nicht die gleichen Variablen, erhalten die Beobachtungen in der verketteten Datei für die Variablen, die in einer Teildatei nicht vorhanden waren, fehlende Werte zugewiesen. Hat beispielsweise die Datei DAT1 eine Variable X1, die Datei DAT2 neben X1 nach eine Variable X2 und die Datei DAT3 außer X1
42
und X2 auch noch eine Variable X3, so erhält die verkettete Datei GESAMT (s. Beispiel oben) in den Beobachtungen aus DAT1 fehlende Werte für X2 und X3 und für die Beobachtungen aus DAT2 fehlende Werte für X3 zugewiesen. Auch bei der Verkettung können Selektionen von Beobachtungen vorgenommen werden: DAT GESAMT; SET DAT1 (OBS = 10) DAT2 (FIRSTOBS = 20 OBS = 20) DAT3 (WHERE= (S1 = 1)) DAT4;
Die Datei GESAMT erhält 10 Beobachtungen von DAT1 (mit der ersten beginnend), 20 Beobachtungen von DAT2 (beginnend mit der 20.) alle Beobachtungen von DAT3 mit S1=1 und den kompletten Inhalt von DAT4. Sind die zu verkettenden Dateien nach einer gemeinsamen Variablen sortiert, können sie so zusammengeführt werden, daß die resultierende Datei ebenfalls nach dieser Variablen sortiert ist: DATA AUSW3; SET DAT1 DAT2; BY F8P10;
Die Datei AUSW3 enthält die Beobachtungen von DAT1 und DAT2 sortiert nach Ausprägungen der Variablen F8P10. Vorher müssen allerdings die Dateien DAT1 und DAT2 nach F8P10 sortiert werden (siehe PROC SORT).
4.4.6.2 Daten aus permanenten SAS-Dateien Permanente SAS-Dateien (s. SAS-Dateiensystem) können bei der Auswahl von Beobachtungen wie temporäre behandelt werden. Es müssen i.A. nur die Syntaxkonventionen für permanente SAS-Dateien beachtet werden (zweistufiger Name, Verwendung der LIBNAME-Anweisung). LIBNAME DATA SET IF
DATEN1 'C:\ROHDAT'; DATEN1.NEU; MANN; S4 = 1;
Die neu zu erstellende permanente SAS-Datei DATEN1.NEU erhält aus der temporären SAS-Datei MANN alle Sätze mit S4=1. LIBNAME DATEN1 'C:\ROHDAT'; DATA AUSW; SET DATEN1.GES; IF S1 = 1;
Die temporäre SAS-Datei AUSW erhält aus der permanenten SAS-Datei DATEN1.GES alle Beobachtungen mit S1=1. LIBNAME AUSW 'C:\ROHDAT'; DATA AUSW.NEU; SET AUSW.ALT; IF S2 = 7;
Die neu zu erstellende permanente SAS-Datei AUSW.NEU erhält aus der schon bestehenden permanenten SAS-Datei AUSW.ALT alle Beobachtungen mit S2=7.
43
5 Der PROC-Step (Auswertungsprozeduren) SAS-Prozeduren sind integrierte Programme, die Daten einer Datei einlesen, prozedurspezifisch verarbeiten und die Ergebnisse ausgeben. Während die bisher beschriebenen Programmtechniken lediglich der Vorbereitung der Daten dienten, ohne eine Auswertung zu veranlassen, beginnt mit dem Aufruf eines PROC-Steps die eigentliche Verarbeitung und Auswertung. Das gesamte SAS-Programm ist prinzipiell eine Folge von DATA- und PROC-Steps, mindestens aber eine Gruppe bestehend aus einem DATA- und einem PROC-Step: DATA
PROC ..
PROC
DATA ......... PROC
DATA .. PROC ... DATA
5.1 SAS-Prozeduren Die Anwendung der im SAS-Programmsystem zur Verfügung stehenden Auswertungsprozeduren ist vom Aufruf her recht einfach. Komplizierter kann je nach Prozedur die Anwendung prozedureigener Parameter sein. Hier sei evtl. in diesem Zusammenhang auf entsprechende Handbücher verwiesen (siehe Literaturverzeichnis). Eine Prozedur wird mittels einer PROC-Anweisung aufgerufen. Die erste PROC-Anweisung nach einem DATA-Step beendet diesen automatisch. Die PROC-Anweisung hat die allgemeine Form: PROC prozedurname [aufrufparameter]; prozeduranweisungen [/ prozedurparameter];
mit:
prozedurname
Name der Auswertungsprozedur - i.d.R. ein Kürzel des Prozedurnamens.
aufrufparameter
Spezielle Anweisungen zur Steuerung des Datenflusses, Variablenauswahl bzw. Untergruppenbildung (S. Abschnitt 6.1.1)
prozeduranweisungen prozedurspezifische Schlüsselwörter zur Wahl der Untersuchungsart, Untersuchungsmethode, Modellspezifikation, Definition der Berechnungen und allgemeinen Prozedursteuerung. /prozedurparameter zusätzliche prozedurspezifische Angaben zur erweiterten Steuerung des Prozedurablaufs. Beispiel: PROC FREQ DATA=AUSW2; TABLES VAR2 VAR3 / NOCUM;
44
Aufgerufen wird hier die Prozedur FREQ (Frequencies) zur Berechnung von einfachen Häufigkeiten. Der Aufruf besteht aus: Schlüsselwort PROC FREQ DATA=AUSW2 TABLES VAR2 VAR3 NOCUM
Prozeduraufruf Prozedurname Aufrufparameter Prozeduranweisung Prozedurparameter
5.1.1 Ausgewählte Aufrufparameter Bei fast allen SAS-Prozeduren gibt es drei generelle Anweisungen, die den Ablauf der jeweiligen Prozedur beeinflußen: 1. DATA= - Anweisung Beim Aufruf einer Auswertungsprozedur nimmt das System an, daß die zuletzt erstellte SAS-Systemdatei (siehe DATA-Step) ausgewertet werden soll. Ist dieses nicht der Fall, muß direkt hinter dem Prozedurnamen die Anweisung: DATA=dateiname
folgen, um den Bezug zur gewünschten SAS-Systemdatei herzustellen. Beispiel: DATA DAT1; INFILE DATEN ´C:\DATEN\ROH1.DAT´; INPUT V1 V2 V3 V4; DATA DAT2; SET DAT1; IF V1 = 1; PROC FREQ; TABLES V2 V3; PROC FREQ DATA=DAT1; TABLES V2 V3; RUN;
Die erste Prozedur FREQ verarbeitet die Daten der SAS-Systemdatei Job erstellte Datei). Wäre die zweite FREQ-Prozedur ohne den DATA=DAT1 aufgerufen worden, hätte sie die gleiche Datei (DAT2) angegebene Parameter ermöglicht die Verarbeitung einer vorher im SAS-Datei (DAT1).
DAT2 (letzte im Aufrufparameter verarbeitet, der Job generierten
2. VAR=- Anweisung Um nicht alle Variablen einer SAS-Systemdatei in eine Auswertung einbeziehen zu müssen, kann man mittels der VAR=-Anweisung eine einschränkende Auswahl treffen: VAR=variablenliste;
Ohne die VAR=-Anweisung werden in einigen SAS-Prozeduren alle Variablen der angesprochenen SAS-Systemdatei ausgewertet, bei anderen wiederum nur alle numerischen.
45
Beispiel: DATA DAT1; INFILE DATEN ´C:\DATEN\ROH1.DAT´; INPUT V1 V2 $ V3 V4; PROC PRINT; VAR=V1 V3; RUN;
Die Prozedur PRINT würde ohne die VAR=-Anweisung die Werte aller eingelesenen Variablen ausgeben, mit der Anweisung beschränkt sich die Ausgabe nur auf die Variablen V1 und V3. 3. BY=- Anweisung Sollen bei Auswertungen Untergruppen nach den Ausprägungen bestimmter Variablen gebildet werden, ist dies mittels der Anweisung: BY=variablenliste;
im Prozeduraufruf möglich. Die Anweisung bewirkt, daß die Prozedurauswertungen für so viele Untergruppen separat durchgeführt werden, wie die angegebene(n) Variable(n) Ausprägungen aufweisen (siehe auch BY-Option bei Prozeduren). Beispiel: DATA DAT1; INFILE DATEN ´C:\DATEN\ROH1.DAT´; INPUT V1 V2 $ V3 V4; PROC PRINT; VAR=V1 V3; BY=V4; RUN;
46
6 Variablen- und Werteetiketten Nach SAS-Konventionen gebildete Variablennamen sind oft recht verwirrend und selten selbsterklärend. Bei Variablenausprägungen (Werten), die vor der Dateneingabe oft verschlüsselt werden, insbesondere wenn die erhobenen Daten nicht numerisch sind, ist die Interpretierbarkeit oft auch erheblich erschwert, wodurch die Wahrscheinlichkeit einer Fehlinterpretation steigt. Um die durch solche zwar notwendigen, aber oft recht hinderlichen Verschlüsselungs- und Benennungsprobleme erhöhte Fehlerwahrscheinlichkeit bei Interpretationen von Ergebnissen zu reduzieren, bittet SAS die Möglichkeit, mittels geeigneter Anweisungen bzw. Prozeduren, sowohl die Variablennamen als auch die Ausprägungen von Variablen mit geeigneten Etiketten (Labels) zu versehen. Beide Anwendungen sollen nun im folgenden beschrieben werden.
6.1 Variablenlabels - die LABEL-Anweisung SAS-Variablennamen sind aufgrund eingeschränkter Namenskonventionen nicht immer selbsterklärend. Insbesondere bei hoher Anzahl einzulesender Variablen ist es oft problematisch, ihre Namen selbsterklärend zu gestalten. Um die Lesbarkeit von Auswertungsprotokollen zu erhöhen, ist es allerdings oft sinnvoll, die Variablennamen mit Etiketten (Beschriftungen, Labels) zu versehen. Benutzerdefinierte Variablenetiketten werden von vielen SAS-Prozeduren verwendet. Der Definition von Variablenetiketten (Labels) dient die LABEL-Anweisung. Sie hat die allgemeine Form: LABEL variable_1='etikett' ...[variable_n='etikett'];
variable
ist der Name der Variablen, der ein Label zugewiesen werden soll.
etikett
ist eine maximal 40 Zeichen umfassende Zeichenkette, die in Hochkommata eingeschlossen werden muß. Beinhaltet das Label selbst Hochkommata, so ist die Zeichenkette entweder in doppelte Einführungszeichen zu setzten oder das zur Zeichenkette gehörende Hochkomma als doppeltes Hochkomma zu kennzeichnen.
Beispiele: LABEL VAR1 = 'Monatlicher Verdienst'; LABEL VAR1 = 'Kandel''s Tau'; LABEL VAR1 = "Kandel's Tau";
In einer LABEL-Anweisung können beliebig viele Variablen mit Labels versehen werden. Beispiel: LABEL GAST1 GAST2 GAST3 GAST4
= = = =
'Mehr Lebensstilanpassung' 'Gastarb.: Heim bei knapper Arbeit' 'Gastarb.: Polit. Betätigung verbieten' 'Gastarb.: Sollten unter sich heiraten';
Die LABEL-Anweisung kann im DATA- und im PROC-Step verwendet werden. • Wird die Label-Zuweisung zu einem Variablennamen im DATA-Step vorgenommen, ist sie permanent.
47
• Eine im PROC-Step vorgenommene Zuweisung ist temporär für die Dauer der Prozedur und überschreibt für diese Dauer eine evtl. früher für die gleiche Variable definierte LabelBelegung. Beispiel: DATA E1; INPUT ID VAR1 VAR2; LABEL ID = ' Kennung' VAR1 = 'Geschlecht' VAR2 = 'Alter'; PROC PRINT; LABEL VAR2 = 'Alter in Jahren'; PROC FREQ;
Das der Variablen VAR2 im DATA-Step zugeordnete Label Alter wird für die Dauer der ersten Prozedur (PROC PRINT) in den Wert Alter in Jahren geändert, in der zweiten Prozedur (PROC FREQ) hat die Variable wieder ihr ursprüngliches Label.
6.2 Value-Labels - Die Prozedur FORMAT Variablenwerte (Ausprägungen, Labels) werden, insbesondere wenn die erhobenen Daten nicht numerisch sind, oft verschlüsselt. Dadurch wird die Interpretierbarkeit der Ergebnisse oft erschwert, die Wahrscheinlichkeit einer Fehlinterpretation steigt. Um dies zu vermeiden, bietet SAS analog zur Etikettierung von Variablennamen auch die Möglichkeit, Variablenausprägungen mit Etiketten (value labels) zu versehen. Für die Etikettierung von Variablenausprägungen wird eine eigene Prozedur verwendet PROC FORMAT. Mir ihrer Hilfe ist es nicht nur möglich, einzelnen Variablenausprägungen jeweils ein Etikett zuzuordnen; mehrere Werte können zu einer Kategorie mit einem gemeinsamen Etikett zusammengefaßt oder aber Wertebereiche gebildet und mit Etiketten versehen werden. Die Prozedur bietet zusätzlich die Möglichkeit, der Bildung von sog. Bildformaten für die Ausgabe numerischer Variablen sowie recodierender Einleseformate; hier sei jedoch nur die Werteetikettierung beschrieben.
6.2.1 Formatdefinition Die Prozeduranweisung hat die folgende Form: PROC FORMAT; VALUE formatname wertebereich_1 = 'etikett_1'... wertebereich_n = 'etikett_n';
Die VALUE-Anweisung definiert die Werteetiketten der Variablenausprägungen als Ausgabeformate.
formatname
ist ein benutzerdefinierter Name des Formats (Labelgruppe für eine Variable). Er muß den SAS-Namenskonventionen genügen (max. 8 Zeichen lang, alphanumerisch beginnend).
48
Zusätzlich gilt: • formatname darf kein reserviertes SAS-Wort oder Name eines SAS-Standardformats sein. • formatname darf nicht numerisch sein. • formatname für alphanumerische Variablen muß mit einem Dollarzeichen ($) beginnen ($ zählt bei der maximalen Länge von 8 Zeichen mit !). Beispiel: PROC FORMAT; VALUE GESCHL
1 = 'Mann' 2 = 'Frau';
PROC FORMAT; VALUE $GESCHL
'm' = 'männlich' 'w' = 'weiblich' 'x' = 'keine Angabe';
wertebereich definiert einen einzelnen Variablenwert, eine Liste von Variablenwerten, einen Bereich von Werten oder eine Liste von Bereichen, denen ein Etikett zugeordnet werden soll. Mindestens ein wertebereich muß definiert werden. Eine Übersicht der möglichen Formen bietet die folgende Tabelle: Form wert wert,..,wert wert-wert bereich,...,bereich
Einzelwert Einzelwertliste Wertebereich Liste von Bereichen
Beispiel 21 19,21,24,27 13-18 5-10,11-15
Für die wertebereich-Angaben gelten folgende Regeln: • Jede wert-Angabe kann maximal 16 Zeichen umfassen, bei Überschreitung wird ab dem 17. Zeichen abgeschnitten,es erfolgt die Augabe einer Fehlermeldung in die SAS-LOG. • Werte alphanumerischer Variablen sind in Hochkommata einzuschließen (siehe Beispiel oben). • Wertebereiche dürfen sich nicht überlappen: VALUE WERT1
1-10 = 'unterdurchschn.' 10-20 = 'überdurchschn.';
• Zur Definition von Wertebereichen können zusätzlich drei Schlüsselwörter benutzt werden:
LOW und HIGH für den kleinsten und größten Wert (auch bei alphanumerischen Variablen - hier Sortierreihenfolge entscheidend), OTHER für alle Variablenwerte, die nicht den spezifizierten Wertebereichen zugeordnet werden.
49
Beispiel: VALUE TEST
LOW-3 = 'tief' 5-7 = 'hoch' OTHER = 'ungültiger Wert';
würde bei einer Variablen mit den markierten Werten 1-8 die Werte 1-3 der Kategorie 'tief', die Werte 5-7 der Kategorie 'hoch', die Werte 4 und 8 (aber auch etwaige 'missings') der Kategorie 'ungültiger Wert' zuordnen. Beispiele zur Kategorienbildung: wert wert1,wert2,... wert1-wert2
1 = 'ja' 1,2,3,7,= 'stimme zu' 18-21 = 'unter 21 Jahren' 'a'-'d' = 'richtig' LOW-17 = 'nicht vollj.’ 65-HIGH = 'rentenberecht.' 14-17,18-25 = 'in der Ausbildung' OTHER = 'sonstige Angaben'
LOW-wert wert-HIGH bereich-bereich OTHER
etikett
ist der dem Wertebereich zugeordnete formatierte Wert ( label). In der Ausgabe werden die Werte im wertebereich durch das etikett ersetzt. Für das etikett gelten die folgenden Regeln:
• etikett ist generell in Hochkommata zu setzen. • etikett darf maximal 40 Zeichen lang sein, manche Auswertungsprozeduren verwenden jedoch nur die ersten 8 bzw. 16 Zeichen. • Wird einem oder mehreren Variablenwerten kein Etikett zugeordnet, werden ihre codierten Werte in der Ausgabe verwendet. Beispiel: PROC FORMAT; VALUE MONAT
1 2 4 5
= = = =
'Januar' 'Februar' 'April' 'Mai';
In den Monatsangaben (numerisch kodiert) würden die mit 3 und 6-12 codierten Monate in der Ausgabe keine Monatsnamen erhalten.
6.2.2 Verwendung von Formaten (FORMAT-Anweisung) Die in der PROC FORMAT definierten Werteetiketten werden von Auswertungsprozeduren nur dann benutzt, wenn sie im PROC-Step (Prozedurenaufruf) über eine FORMATAnweisung den jeweiligen Variablen zugeordnet werden. Die Anweisung hat die Form: FORMAT variable [format] ...variable [format];
50
variable
format
ist der Name der Variablen, der ein zuvor definiertes Format zugeordnet werden soll. Es können mehreren Variablen gleiche Formate zugewiesen werden (siehe Beispiel). der Name des zuzuordnenden, in der VALUE-Anweisung der PROC FORMAT definierten Formats. Hinter dem Formatnamen muß ein Punkt (.) gesetzt werden !
Beispiel: DATA TEST; INPUT (GAST1-GAST4) (1.) AINFO 40 #2 SEX; PROC FORMAT; VALUE GESCHL 1='männlich' 2='weiblich'; VALUE GAST 1='ja' 2='nein' 9='keine Angabe'; PROC FREQ; FORMAT SEX GESCHL. GAST1 AINFO GAST.; TABLES SEX GAST1 AINFO; RUN;
In der PROC FORMAT werden die Formate GESCHL und GAST definiert. In der Auswertungsprozedur (PROC FREQ) werden mittels FORMAT-Anweisung der Variablen SEX das Format GESCHL und den Variablen GAST1 und AINFO das gemeinsame Format GAST zugeordnet ( beachte jeweils den Punkt (.) nach dem Formatnamen in der FORMATAnweisung !). Soll ein im PROC-Step einer Variablen zugewiesenes Format aufgehoben werden, wird die Variable in einer zusätzlichen FORMAT-Anweisung ohne Formatnamen genannt. Beispiel: PROC FREQ; FORMAT SEX GESCHL. GAST1 AINFO GAST.; TABLES SEX GAST1 AINFO; FORMAT AINFO; TABLES SEX*AINFO; RUN;
Die Variable AINFO wird einmal mit einem Format versehen ausgewertet, zugewiesen durch die erste FORMAT-Anweisung. Die 'leere' FORMAT-Anweisung (vorletzte Zeile) hebt die Formatzuordnung auf, so daß die Variable im zweiten Auswertungsschritt mit ihren codierten Ausprägungen ausgegeben wird.
51
7 Output-Gestaltung (OPTIONS-Anweisung) Die Gestaltung der Ausgabeseiten eines SAS-Programms kann über die OPTIONSAnweisung vorgenommen werden. Diese Anweisung sollte, wenn sie für die gesamte Ausgabe gelten soll, (unabhängig davon für welche Angaben sie verwendet wird) möglichst am Anfang eines SAS-Programms (oberste Zeile) stehen. Sollen Optionen zur OutputGestaltung nur für Teile der Ausgabe gelten, kann die OPTIONS-Anweisung im SAS-Job auch direkt vor dem gewünschten Programmteil (z.B. Prozeduraufruf) benutzt werden.
7.1 Seitenlänge Die Seitenlänge der SAS-Ausgabe kann mittels der oben genannten Option definiert werden. Der gewünschte Wert wird hinter die OPTIONS-Anweisung gesetzt: OPTIONS PAGESIZE = n;
n
gibt die Anzahl Zeilen pro Outputseite des SAS-Ausgabe an und kann Werte zwischen 15 und 32767 annehmen. Der Defaultwert ist installationsabhängig und kann daher hier nicht angegeben werden.
Beispiel: OPTIONS PAGESIZE = 47;
7.2 Seitenbreite Die Seitenbreite wird, wie die Seitenlänge, über eine Systemoption gesetzt. Dies kann zusammen mit der Definition der Seitenlänge in einer Anweisung geschehen. Auch hier gilt, daß die Definition der Seitenbreite möglichst am Anfang eines SAS-Programms vorgenommen werden sollte: OPTIONS LINESIZE = n;
n
spezifiziert die Länge einer Outputzeile im Ausgabeprotokoll (Anzahl Druckzeichen pro Zeile) und kann Werte zwischen 64 und 256 annehmen.
Beispiel: OPTIONS LINESIZE = 65;
oder OPTIONS PAGESIZE = 75 LINESIZE = 65;
7.3 Seitenausrichtung Prozeduroutputs der SAS-Auswertungsprozeduren werden standardmäßig zentriert ausgegeben. Das führt manchmal zu unerwünschten Effekten bei relativ breiten Outputs die Ausgabe wird evtl. in mehrere Teile „zerhackt“. Es ist jedoch mittels geeigneter Optionen möglich, diesen Effekt zu unterbinden: OPTIONS NOCENTER;
52
7.4 Titel und Fußnoten 7.4.1 Titel Das Programmprotokoll und die Auswertungsprotokolle können mit Überschriften versehen werden. Hierzu wird die TITLE-Anweisung benutzt. Die TITLE Anweisung hat die allgemeine Form: TITLE[n] ['text ' | "text"];
n
ist die relative Zeilennummer der Titelzeile. Es kann Werte zwischen 1 und 10 annehmen. 1 für TITLE1 kann ausgelassen werden.
'text' "text" Text der Titelzeile. Maximal 132 Zeichen lang.
Wird nur TITLE ohne zusätzliche Argumente gesetzt, werden alle davor definierten Titelzeilen auf 'blank' gesetzt. Die TITLE-Anweisung kann beliebig oft und an beliebigen Stellen des SAS-Programms gesetzt werden. Jede TITLE[n]-Anweisung setzt eine neue Überschriftenzeile und setzt etwaige vorher für den Wert n definierte Zeilen außer Kraft. Die Numerierung der Titelzeilen muß nicht fortlaufend sein. Zeilen mit nicht genannten relativen Nummern werden auf 'blank' gesetzt. Alle definierten Überschriftenzeilen werden zentriert innerhalb der für die Ausgabe definierten Zeilenlänge gesetzt. Beispiel: TITLE TITLE2 TITLE5 TITLE6
'Ein SAS-Beispielprogramm'; 'Probeauswertung'; 'Häufigkeitstabellen'; '===> Kreuztabelle 1 <===';
7.4.2 Fußnoten Ähnlich wie mit Überschriften kann der SAS-Output mit Fußnoten versehen werden. Mit Hilfe der FOOTNOTE-Anweisung können bis zu 10 Fußnoten definiert werden. Die Anweisung hat die allgemeine Form: FOOTNOTE[n] ['text' | "text"];
n 'text'
relative Zeilennummer der Fußnotenzeile. Kann Werte zwischen 1 und 10 annnehmen. Wird kein Wert angegeben, nimmt das System 1 an. Text der gewünschten Fußnotenzeile.
Wird FOOTNOTE ohne zusätzliche Argumente gesetzt, werden alle davor definierten Fußnoten gelöscht ( auf 'blank' gesetzt).
53
Fußnoten können, wie Titel, an beliebiger Stelle des Programms gesetzt und geändert werden. Beispiel: FOOTNOTE 'Auswertung vom:'; FOOTNOTE2 ' 15.10.92';
7.5 Unterdrücken von Seitenelementen und -formaten Neben selbst definierten Elementen (Titel, Fußnoten) enthalten die Ausgabe-Seiten Standard-Elemente, wie Datum, eine automatisch generierte erste Titelzeile mit einem SASSchriftzug oder vordefinierte Längenangaben für Zeilen- und Seitenlängen. Einige dieser Elemente können über die OPTIONS-Anweisung verändert oder unterdrückt werden. Wird diese Anweisung beispielsweise mitten im SAS-Job verwendet, können auch selbst definierte Werte für Teile der Ausgabe festgelegt werden. Beispiele: OPTIONS NODATE NOCENTER LINESIZE=65 PAGESIZE=75;
unterdrückt die Ausgabe von Datum, die Ausgabe wird linksbündig positioniert, die Seitenlänge auf 75 Zeilen und die Zeilenlänge auf 65 Zeichen festgelegt. OPTIONS PAGESIZE=70 NOCENTER; DATA DAT1; INPUT V1 V2 V3; . . weitere Anweisungen
. OPTIONS PAGESIZE=120; PROC PRINT; TITLE ´Liste der eingelesenen Werte´; OPTIONS PAGESIZE=65 LINESIZE=70 CENTER; PROC FREQ; TABLES .......;
die an Jobanfang gesetzten Optionen (Seitenlänge 70, linksbündige Ausgabe) werden für die Ausgabe der Prozedur PRINT geändert (Seitenlänge 120, linksbündige Ausgabe bleibt), vor der Prozedur FREQ wird die Seitenlänge auf 65 und die Zeilenlänge auf 70 gesetzt, die Ausgabe der Prozedurergebnisse erfolgt zentriert.
54
8 Abschließendes Programmbeispiel Am Beispiel eines vollständigen SAS-Programms soll hier die Anwendung möglichst vieler beschriebener Syntaxelemente der SAS-Sprache demonstriert werden. Das Beispielprogramm soll Daten verarbeiten und auswerten, die einen Ausschnitt der in der Tabelle im Kap. 3.1 vorgestellten Musterdaten darstellen. Die zu verarbeitenden Daten sind der Übersichtlichkeit halber als instreamDaten im Programmtext enthalten. Das Programm soll Mittelwerte des Einkommens und der Zeitdauer des Schulbesuchs der befragten Personen errechnen, ausgeben und für eine Untergruppe von Daten auf eine permanente SAS-Datei speichern. Die Numerierung am linken Rand ist nicht Bestandteil des Programms, sondern bezeichnet Programmteile, die im folgenden genauer kommentiert werden: 1) 2) 3) 4) 5)
6)
7) 8)
9)
10) 11) 12) 13) 14)
DATA BSP; OPTIONS NODATE LINESIZE=64 PAGESIZE=52; LIBNAME DATAUS ´C:\AUSWERT\DATEN´; INPUT FAMSTD 1 SEX 2 ALTR 3 EINK 4-7 STT 8´ VORS 9 KNSW 10 SB 11-12; LABEL FAMSTD=´Familienstand´ SEX=´Geschlecht ALTR=´Alter in Jahren´ EINK=´Einkommen´ SB=´Schulbesuch in Jahren´; CARDS; 111150011 07 112180032210 113220042407 211185042410 212225064713 213265063815 311170021310 312212031310 312245041308 121180013408 122210012108 123205043413 22119002 10 22228003 513 223140012108 321200022408 322175033706 323350055 11250032610 12 0800 1115 ; PROC FORMAT; VALUE ALTRFMT 1 = ´18 - 21 Jahre´ 2 = ´22 - 35 Jahre´ 3 = ´36 - 45 Jahre´ OTHER = ´über 45 Jahre´; VALUE SEXFMT 1 = ´weiblich´ 2 = ´maennlich´; PROC MEANS FW=9 MAXDEC=2; TITLE ´Ausgabe der Prozedur MEANS´; VAR EINK SB; CLASS SEX; FORMAT SEX SEXFMT.; OUTPUT OUT=BSP2 MEAN=; PROC PRINT DATA=BSP2; TITLE1 ´Ausgabe der Prozedur PRINT´; TITLE2 ´Inhalt der OUT-Datei´; RUN; DATA DATAUS.MANN; SET BSP; IF SEX = 2; RUN;
Das Programm besteht aus folgenden Schritten:
55
1)
DATA-Anweisung. Definiert wird eine temporäre SAS-Arbeitsdatei mit dem Namen BSP. Nach Beenden des SAS-Programms steht diese Datei nicht mehr zur Verfügung.
2)
Programmoptionen (wahlfrei). Die Ausgabe des Tagesdatums im Protokoll wird unterdrückt, die Seitenlänge auf 52 Zeilen und die Zeilenlänge auf 64 Zeichen gesetzt.
3)
Definition des Zugriffspfades zu einer SAS-Datenbibliothek mit dem mnemonischen Namen DATAUS (für permanente Speicherung von SAS-Systemdaten - hier DOS-spezifisch für DOS-SAS oder WinSAS, UNIX-Angabe analog)
4)
INPUT-Anweisung zur Beschreibung des einzulesenden Datensatzes. Hier werden die Variablen definiert (benannt) und ihre relative Position im Datensatz beschrieben.
5)
Labeling (Ettiketierung) der Variablennamen - die unter 4) definierten Variablennamen werden für die Auswertungen durch die Etiketten ersetzt. Bei Speicherung in permanenten SAS-Dateien bleibt das Labeling erhalten.
6)
CARDS-Anweisung - Beginn der instream-Daten. Hier pro Beobachtung eine Zeile, missings = Leerzeichen.
7)
Semikolon in eigener Zeile als Kennung für Datenende.
8)
Aufruf der Prozedur FORMAT zum value labeling - die Variablenausprägungen der Variablen ALTR und SEX werden mit Etiketten versehen. Die Formatnamen enden jeweils mit dem String FMT, um sie im weiteren Jobverlauf von Variablennamen unterscheiden zu können (Erfahrungswert, nicht zwingend, jedoch dürfen die Formatnamen nicht dem Variablennamen gleich sein!)
9)
Aufruf der Prozedur MEANS zur Mittelwertberechnung.mit den Parametern FW= und MAXDEC= (prozedurspezifisch). FW=9 legt die Feldlänge für die Ausgabe von Variablenwerten auf 9 Zeichen fest, MAXDEC=2 legt die Anzahl von Dezimalstellen für die Ausgabe der Werte auf 2 fest. Der Prozeduroutput wird mit einem geeigneten Titel versehen. Gerechnet wird für die Variablen EINK und SB (VAR EINK SB), klassiert nach Ausprägungen der Variablen SEX (CLASS SEX), der bei der Ausgabe der errechneten Werte wird das in 8) definierte Format zugewiesen (FORMAT SEX SEXFMT.). Zusätzlich wird eine Ausgabe der errechneten Mittelwerte über den Parameter MEAN= in die SAS-Datei BSP2 (temporär) veranlasst.
10) 11) 12)
Aufruf der Prozedur PRINT zur Ausgabe des Inhalts der unter 11) erstellten SAS-Datei BSP2. Über TITLE2 wird ein zusätzlicher Titel in einer zweiten Titelzeile definiert. Der in 9) definierte Titel bleibt bestehen.
13)
Start des Prozedurblocks.
14)
DATA-Step zum Generieren einer permanenten SAS-Systemdatei MANN in der unter 3) definierten SAS-Bibliothek DATAUS. Die Datei MANN wird mit allen Sätzen der Datei BSP belegt, für die die Auswahl SEX=2 zutrifft.
Werden die auszuwertenden Daten nicht als instream-Daten im Programmtext gehalten (was eigentlich der Regelfall bei größeren Datenumfängen ist), sondern sollen sie aus einer,
56
vom SAS-Programm aus gesehen, externen Rohdatendatei eingelesen werden, so hat das obige Programm eine etwas andere Form. Es muß um die Definitionsteile der externen Datei erweitert werden (im nachfolgenden Beispiel durch * gekennzeichnet), die instream-Daten (incl. CARDS-Anweisung und abschließendem Semikolon) müssen entfernt werden:
* *
DATA BSP; OPTIONS NODATE LINESIZE=64 PAGESIZE=52; FILENAME DATEN ´C:\ROHDAT\AUSWERT.DAT´; LIBNAME DATAUS ´C:\AUSWERT\DATEN´; INFILE DATEN; INPUT FAMSTD 1 SEX 2 ALTR 3 EINK 4-7 STT 8´ VORS 9 KNSW 10 SB 11-12; LABEL FAMSTD=´Familienstand´ SEX=´Geschlecht ALTR=´Alter in Jahren´ EINK=´Einkommen´ SB=´Schulbesuch in Jahren´; PROC FORMAT; VALUE ALTRFMT 1 = ´18 - 21 Jahre´ 2 = ´22 - 35 Jahre´ 3 = ´36 - 45 Jahre´ OTHER = ´über 45 Jahre´; VALUE SEXFMT 1 = ´weiblich´ 2 = ´maennlich´; PROC MEANS FW=9 MAXDEC=2; TITLE ´Ausgabe der Prozedur MEANS´; VAR EINK SB; CLASS SEX; FORMAT SEX SEXFMT.; OUTPUT OUT=BSP2 MEAN=; PROC PRINT DATA=BSP2; TITLE1 ´Ausgabe der Prozedur PRINT´; TITLE2 ´Inhalt der OUT-Datei´; RUN; DATA DATAUS.MANN; SET BSP; IF SEX = 2; RUN;
Beide Programmversionen arbeiten (bis auf das Einlesen der Rohdaten) identisch, jedoch ist die Verarbeitung über eine externe Rohdaten-Datei für das Handling des Programmtextes, wie schon dieses kleine Programmbeispiel sicherlich deutlich zeigt, wesentlich vorteilhafter.
57
Der Vollständigkeit halber sei noch der Prozeduroutput und die vom Programm erzeugte SAS-Log hier angelistet: Programmoutput: Ausgabe der Prozedur MEANS
1
SEX N Obs Variable Label N Mean ---------------------------------------------------------------weiblich 10 EINK Einkommen 10 2102.00 SB Schulbesuch in Jahren 10 10.00 maennlich
10
EINK Einkommen 10 2010.00 SB Schulbesuch in Jahren 9 9.89 ---------------------------------------------------------------SEX N Obs Variable Label Std Dev -----------------------------------------------------------weiblich 10 EINK Einkommen 378.65 SB Schulbesuch in Jahren 2.49 maennlich
10
EINK SB
Einkommen Schulbesuch in Jahren
731.36 3.06
SEX N Obs Variable Label Minimum -----------------------------------------------------------weiblich 10 EINK Einkommen 1500.00 SB Schulbesuch in Jahren 7.00 maennlich
10
EINK Einkommen 800.00 SB Schulbesuch in Jahren 6.00 -----------------------------------------------------------SEX N Obs Variable Label Maximum -----------------------------------------------------------weiblich 10 EINK Einkommen 2650.00 SB Schulbesuch in Jahren 15.00 maennlich
10
EINK Einkommen 3500.00 SB Schulbesuch in Jahren 15.00 -----------------------------------------------------------Ausgabe der Prozedur PRINT Inhalt der OUT-Datei OBS
SEX
1 2 3
. weiblich maennlich
_TYPE_ 0 1 1
2
_FREQ_
EINK
SB
20 10 10
2056 2102 2010
9.9474 10.0000 9.8889
58
SAS-LOG: 1 DATA BSP; 2 OPTIONS NODATE LINESIZE=64 PAGESIZE=52; 3 LIBNAME DATAUS 'C:\AUSWERT\DATEN'; NOTE: Libref DATAUS was successfully assigned as follows: Engine: V608 Physical Name: C:\AUSWERT\DATEN 4 INPUT FAMSTD 1 SEX 2 ALTR 3 EINK 4-7 STT 8 5 VORS 9 KNSW 10 SB 11-12; 6 LABEL FAMSTD='Familienstand' 7 SEX='Geschlecht' 8 ALTR='Alter in Jahren' 9 EINK='Einkommen' 10 SB='Schulbesuch in Jahren'; 11 CARDS; NOTE: The data set WORK.BSP has 20 observations and 8 variables. NOTE: The DATA statement used 10.71 seconds. 32 ; 33 PROC FORMAT; 34 VALUE ALTRFMT 1 = '18 - 21 Jahre' 35 2 = '22 - 35 Jahre' 36 3 = '36 - 45 Jahre' 37 OTHER = 'über 45 Jahre'; NOTE: Format ALTRFMT has been output. 38 VALUE SEXFMT 1 = 'weiblich' 39 2 = 'maennlich'; NOTE: Format SEXFMT has been output. NOTE: The PROCEDURE FORMAT used 2.95 seconds. 40 41 42 43 44 45
PROC MEANS FW=9 MAXDEC=2; TITLE 'Ausgabe der Prozedur MEANS'; VAR EINK SB; CLASS SEX; FORMAT SEX SEXFMT.; OUTPUT OUT=BSP2 MEAN=;
NOTE: The data set WORK.BSP2 has 3 observations and 5 variables. NOTE: The PROCEDURE MEANS used 5.26 seconds. 46 47 48
PROC PRINT DATA=BSP2; TITLE2 'Inhalt der OUT-Datei'; RUN;
NOTE: The PROCEDURE PRINT used 1.87 seconds. 49 50 51 52
DATA DATAUS.MANN; SET BSP; IF SEX = 2; RUN;
NOTE: The data set DATAUS.MANN has 10 observations and 8 variables. NOTE: The DATA statement used 1.04 seconds.
59
9 Aufruf des SAS-Systems Je nach benutzter Version, sind die Aufrufe der SAS-Software auf den Anlagen des Universitätsrechenzentrums unterschiedlich. Für die Lizenzsoftware auf Privatrechnern (in den meisten Fällen SAS für WINDOWS) oder Zugriffe auf URZ-Rechner (UNIX) von privaten Rechnern aus gelten die weiter im Text beschriebenen Bedingungen ebenfalls. Für alle SAS-Versionen sind mindestens rudimentäre Kenntnisse der jeweiligen Betriebssysteme unumgänglich. Dieses trifft insbesondere auf die UNIX-Versionen zu, wo neben Kenntnissen des Betriebssystems auch noch Kenntnisse aus dem Bereich des Handlings von Computer-Netzen, Verbindungsaufbau und Datentransfer in Netzen erforderlich sind. Entsprechende Einführungs- und weiterführende Seminare finden regelmäßig im Universitätsrechenzentrum statt (Anmeldung über die Benutzerberatung des URZ, Tel. 2847).
9.1 WINDOWS-Version Die WINDOWS-Version von SAS wird über ein eigenes Programmsymbol aufgerufen. Auf den Netzen des URZ ist dieses Symbol in der Programmgruppe Mathe/Statistik des Programmanagers von WINDOWS zu finden. Bei lokalen Installationen wird für SAS vom Installationsprogramm eine eigene Programmgruppe eingerichtet. Die Standardoberfläche besteht aus drei Fenstern: • dem Editor-Fenster • dem Output-Fenster • dem Log-Fenster. Die Fenster werden als Pop-Up-Oberfläche generiert (ohne Funktionsleisten). Für den Einsteiger bzw. Anfänger, aber auch für WINDOWS-erfahrene Anwender ist es empfehlenswert, über die Funktion Options und deren Unterfunktion Preferences des Hauptfensters von SAS, die Menu-Bar-Version (mit Funktionsleisten) einzustellen, die ein Arbeiten im gewohnten Windows-Standard ermöglicht:
60
Empfehlenswert ist ebenfalls das Einblenden von Zeilennummern in die Editoroberläche (möglich über die Funktion Edit des Editorfensters, Unterfunktion Options, Option Numbers), da dadurch das Auffinden der SAS-Programmstatements in der SAS-Log erleichtert wird. Die Bedienung der SAS-Oberfläche erfolgt über die Funktionsleisten der Fenster oder über die Tasten F1 bis F12, deren Belegung (auch individuell möglich) über die HELP-Funktion der Fenster abzufragen ist. Für Standardfunktionen gibt es eine Standardbelegung der Funktionstasten: Taste F1 F3 F4
Funktion Help end recall
F5 F6 F7 F8
pgm log output zoom off /submit
F9 F11
keys command window
Beschreibung Online-Hilfe Schließen eines Fensters Wiedereinblenden eines Programmtextes oder Programmteils in das Editorfenster (ab CursorPosition) Wechsel zum Editorfenster Wechsel zum Log-Fenster Wechsel zum Output-Fenster Verkleinern des Editorfensters und Übergabe des SAS-Programms zur Verarbeitung Information über die Belegung der F-Tasten Öffnen eines DOS-Eingabe-Fensters
9.2 UNIX-Versionen
9.2.1 VT100/VT200-Modus Die SAS-Oberfläche im VT100/VT200-Modus (Line-Modus) der UNIX-Version besteht ebenfalls aus den drei schon oben genannten Fenstern, allerdings in einer anderen Darstellung - sichtbar sind nach dem Aufruf nur zwei Fenster - Editor und Log, das OutputFenster erscheint erst nach Jobausführung. Um diese Version aufzurufen, ist zuerst über TelNet eine Verbindung zum UNIX-Rechner Bonsai des URZ aufzunehmen, dort ein ordnungsgemäßes Login durchzuführen und dann über das Kommando SAS die SAS-Software zu aktivieren. Voraussetzung dafür ist allerdings eine gültige Benutzerkennung auf dem UNIX-Rechner. Für Studentinnen und Studenten der FeU gibt es eine Möglichkeit, eine solche Benutzerkennung in der Form eines Direkteintrags in den Rechner zu „beantragen“. Die Modalitäten des Vorgehens sind in der Broschüre Z021/9503 des URZ mit dem Titel „Broschürensammlung zur dezentralen Rechnernutzung“ genau beschrieben (erhältlich beim Dispatch des URZ, Tel. 2825 oder 2844). Die genante Broschüre enthält zusätzlich noch Informationen zum Verfbindungsaufbau, Arbeiten im UNIX-System, Datentransfer und Informationsdiensten.
61
Durch die Eingabe des Kommandos PMENU in der Command-Zeile eines Fensters kann eine Menu-Bar-ähnliche Oberfläche (mit Funktionsleiste) der Fenster erreicht werden, wodurch eine WINDOWS-ähnliche Arbeitstechnik möglich wird:
Die Bedienung der Oberfläche erfolgt dann hauptsächlich über eine Funktionsleiste. Für Standardfunktionen gibt es auch hier eine Standardbelegung der Funktionstasten mit den Werten: Taste F1 F2 F3
Funktion Help zoom submit / pgm
F4
pgm / recall
Ctrl / F6 Ctrl / F7
output page up
Beschreibung Online-Hilfe Zoomen eines Fensters Übergabe des SAS-Programms zur Verarbeitung Wechsel zum Editorfenster und Einblenden von Programmen /Programmteilen Wechsel zum Output-Fenster
62
Ctrl / F8 Ctrl / L Ctrl / U
page down log home
Wechsel zum Log-Fenster Wechsel auf Pos 1 eines Fensters
9.2.2 X-Windows-Modus Die äußere Bild der SAS-Oberfläche im X-Windows-Modus ist fast analog dem der WINDOWS-Version. Verfügbar ist diese Version auf dem UNIX-Rechner Bonsai des URZ (Benutzerkennung erforderlich - s. oben). Sie wird nur auf Geräten in lokalen Netzen des URZ in Hagen angeboten und kann dort in der hier dargestellten Form nach dem Eröffnen einer Bonsai-Sitzung aufgerufen werden:
Die Oberfläche besteht ebenfalls aus den schon oben genannten drei Fenstern und kann auf dem UNIX-Rechner Bonsai über das Kommando xsas aufgerufen werden. Es empfiehlt sich, beim Aufruf den entsprechenden Prozess in den Hintergrund zu stellen (SAS als Hintergrundprozess aufrufen) - möglich über das Kommando. xsas &
Auch in dieser SAS-Oberfläche ist eine kombinierte Bedienung über die Funktionsleiste und/oder Funktionstasten möglich.
63
Für Standardfunktionen steht auch hier eine Standardbelegung der F-Tasten zur Verfügung (wie in den übrigen Versionen individuell konfigurierbar): Taste F1 F2 F7 F8 F9
Funktion Help keys backward forward zoom off /submit
F10 F11 Ctrl / x
left clear insert
Beschreibung Online-Help Belegung der F-Tasten „Blättern“ nach oben (Editor) „Blättern“ nach unten (Editor) Übergabe eines Programms zur Verarbeitung und Verkleinern des EditorFensters „Blättern“ nach links (Editor) Löschen des Fensterinhalts Einfügen von Zeichen (Editor)
10 Arbeiten mit dem SAS-Editor Unabhängig von der benutzten SAS-Version (s.o.) ist das Handling des Programm-Editors nahezu gleich. Die Oberflächen des Editors besitzen eine Funktionsleiste, die unter anderem die Funktionen File, Edit und View enthält, mittels derer über die drag und dropArbeitstechnik innerhalb der Editor-Oberfläche über Markierungen mit der Maus und die Benutzung der entsprechenden Funktionsbefehle (z.B. Paste, Cut, Delete usw.) ein SASProgramm aufgebaut (editiert) oder nach Anforderungen der Einzelauswertungen verändert werden kann d.h. vorhandene oder zu generierende Programmteile können nach Bedarf an beliebige gewünschte Positionen des Editor-Fensters gebracht werden können. Bei kleineren, übersichtlichen Programmen ist diese Arbeitstechnik durchaus effektiv und auch empfehlenswert. Bei größeren (längeren) Programmen bedient man sich gerne einer anderen Methode: Der SAS-Editor aller Versionen beinhaltet zusätzlich einen spezifischen Oberflächenbereich - die Zeilennumerierung. Sollte diese nach dem Aufruf von SAS nicht in die EditorOberfläche eingeblendet worden sein, kann sie über die Funktionskette Edit - Options Numbers nachträglich eingeblendet werden. In dem Bereich der Zeilennumerierung können Editierkommandos (sog. Zeilenkommandos) eingegeben werden, die das Handling des Editors schneller und evtl. sogar einfacher machen. Die Arbeit mit Zeilenkommandos ist sicherlich von der Arbeitstechnik her anders als die unter Fensteroberflächen übliche Vorgehensweise der Markierungen und Übernahmen von Blöcken bzw. Einzelzeichen oder Zeilen, bei vielen Editiervorgängen ist sie jedoch effektiver und ermöglicht einen schnelleren Programmaufbau bzw. Programmkorrektur und strukturierung. Nachfolgend werden anhand von Beispielen die Standardarbeitsschritte dieser Arbeitstechnik erklärt.
64
Übersicht der gebräuchlichsten Zeilenkommandos: C oder CC CL oder CCL COLS CU oder CCU D oder DD I JC oder JJC JL oder JJL JR oder JJR M oder MM R oder RR TC TS > oder >> < oder <<
Kopieren einer Zeilen (-blöcken) Konvertieren aller Buchstaben in Kleinbuchstaben (Zeile oder Block) Anzeigen eines Spaltenlineals Konvertieren aller Buchstaben in Großbuchstaben (Zeile oder Block) Löschen einer Zeile oder eines Zeilenblocks Einfügen von Zeilen Zentrieren von Zeilen (-blöcken) linksbündiges Ausrichten von Zeilen (-blöcken) rechtsbündiges Ausrichten von Zeilen (-blöcken) Verlagern (Move) von Zeilen (-blöcken) Wiederholen von Zeilen (-blöcken) Verbinden zweier Zeilen Aufspalten zweier Zeilen an Cursor-Position Rechtsverschiebung von Zeilen (-blöcken) ohne Zeichenverlust Linksverschiebung von Zeilen (-blöcken) ohne Zeichenverlust
Die in der Übersicht benutzten großen Buchstaben in Zeilenkommandos sind nicht bindend, es können in allen Kommandos kleine Buchstaben benutzt werden. Nach vollständiger Eingabe des Kommandos werden systemseitig die Angaben in Großbuchstaben umgewandelt, deshalb erscheinen in den Beispielen dieses Kapitels allen Angaben in Großbuchstaben. Einige Kommandos liegen in zwei Versionen vor. Sie beziehen sich entweder auf einzelne Zeilen oder auf Zeilenblöcke z.B. C für das Kopieren einer einzelnen Zeile und CC für das Kopieren eines Zeilenblocks. Zeilenblöcke werden dadurch gekennzeichnet, daß man im Zeilennummernbereich der ersten und der letzten Zeile eines Blocks die entsprechenden Buchstabenkombinationen des gewünschten Befehls plaziert (z.B. CC oder DD), der Befehl wirkt dann auf alle dazwischenliegenden Zeilen incl. der Zeilen mit den Befehlsbuchstaben (siehe Beispiele weiter im Text). Bei mehreren Befehlen kann ein zusätzliches Argument als Zielangabe angegeben werden: A, B, O
sind solche Argumente, die eine Zielangabe für die Kommandos zum Kopieren (C bzw. CC), Einfügen (I) oder Verlagern (M bzw. MM) von Zeilen oder Zeilenblöcken bilden.
A
(für after) bewirkt, daß die zu bearbeitende Zeile (Block) hinter die mit A gekennzeichnete Zeile gesetzt wird.
B
(für before) bewirkt, daß die zu bearbeitende Zeile (Block) vor die mit B gekennzeichnete Zeile gesetzt wird.
O
(für overlaying) bewirkt, daß die zu bearbeitende Zeile (Block) in die mit O gekennzeichnete Zeile gesetzt wird, wobei alle Leerzeichen der mit O gekennzeichneten Zeile durch an gleicher Position stehende Zeichen der zu bearbeitenden Zeile ersetzt werden.
Die Zeilenkommandos im einzelnen:
C[n]
zum Kopieren einer oder mehrerer Zeilen. Mit A, B oder O kann angegeben werden, wohin die Zeile kopiert werden soll. Mit n (optional) kann die Anzahl der zu kopierenden Zeilen angegeben werden.
Beispiele:
65
Eingabe:
bewirkt:
00001 PROC MEANS; C0002 RUN; A0003 PROC FREQ; 00004 00005
00001 00002 00003 00004 00005
Eingabe:
bewirkt:
C2001 PROC MEANS; 00002 RUN; A0003 PROC FREQ; 00004 00005
00001 00002 00003 00004 00005
Eingabe:
bewirkt:
C0001 1111111111111 O0002 00 00 00 0 00003 00004 00005
00001 1111111111111 00002 0011001100110 00003 00004 00005
PROC MEANS; RUN; PROC FREQ; RUN;
PROC MEANS; RUN; PROC FREQ; PROC MEANS; RUN;
CC..CC zum Kopieren von Zeilenblöcken. Mit A, B oder O kann angegeben werden, wohin die Zeilen kopiert werden soll. Der n-Parameter steht bei CC nicht zur Verfügung. Beispiel: Eingabe:
bewirkt:
00001 CARDS; CC002 1 5 8 9 CC003 2 4 6 8 B0004 00005
00001 00002 00003 00004 00005
CL[n] CCL
CARDS; 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8
Konvertierung des Zeilentextes in Kleinschreibung (lover case) Der n-Parameter ist nur bei der Verwendung von CL möglich (nicht bei Blöcken von Zeilen).
Beispiele: Eingabe:
bewirkt:
00001 PROC MEANS; CL002 RUN; 00003 PROC FREQ; 00004 00005
00001 PROC MEANS; 00002 run; 00003 PROC FREQ; 00004 00005
Eingabe:
bewirkt:
00001 PROC MEANS; CL2 2 RUN; 00003 PROC FREQ; 00004 00005
00001 PROC MEANS; 00002 run; 00003 proc freq; 00004 00005
Eingabe:
bewirkt:
CCL01 PROC MEANS; 00002 RUN; CCL03 PROC FREQ;
00001 proc means; 00002 run; 00003 proc freq;
66
00004 00005
00004 00005
CU[n] CCU
Konvertierung des Zeilentextes in Großschreibung (upper case) Der n-Parameter ist nur bei der Verwendung von CU möglich (nicht bei Blöcken von Zeilen). Beispiele analog zu CL bzw. CCL.
COLS
Einblenden eines Spaltenlineals, insbesondere bei der Eingabe von instreamDaten nützlich. Kann mit D (für delete) wieder ausgeblendet werden.
Beispiel: Eingabe:
bewirkt:
00001 1111111111111 COLS2 00 00 00 0 00003 00004 00005
00001 1111111111111 00002 ----|----10----|---00003 00 00 00 0 00004 00005
Löschen von Zeilen (D) oder Zeilenblöcken (DD) Über den n-Parameter können inclusive der gekennzeichneten Zeile n Zeilen gelöscht werden.
D[n] DD
Beispiele: Eingabe:
bewirkt:
D0001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
00001 RUN; 00002 PROC FREQ; 00003 00004 00005
Eingabe:
bewirkt:
D2 01 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
00001 PROC FREQ; 00002 00003 00004 00005
Eingabe:
bewirkt:
00001 DD002 00003 00004 DD005
00001 CARDS; 00002 00003 00004 00005
CARDS; 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8
I[A|B][n]
Einfügen von leeren Zeilen. Die Angabe I (ohne Parameter) fügt eine leere Zeile hinter die mit I gekennzeichnete ein. mit n kann die gewünschte Anzahl einzufügender Zeilen angegeben werden. A bzw. B dienen als Zielangabe (siehe z.B. Kopieren von Zeilen C / CC)
67
Beispiele: Eingabe:
bewirkt:
I0001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
00001 PROC MEANS 00002 00003 RUN; 00004 PROC FREQ; 00005
Eingabe:
bewirkt:
I3 01 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
00001 PROC MEANS 00002 00003 00004 00005 RUN; 00006 PROC FREQ; 00007
Eingabe:
bewirkt:
IB2 1 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
00001 00002 00003 PROC MEANS 00004 RUN; 00005 PROC FREQ; 00006
JC][n] JJC][n]
Zentrieren einer Zeile oder eines Zeilenblocks. n gibt an, um welche Spalte herum zentriert werden soll. Bei JJC kann n sowohl am Blockanfang als auch am Blockende gesetzt werden. Wird an beiden Stellen n gesetzt, so wird nur die obere Angabe berücksichtigt.
JL][n] JJL][n]
Linksbündiges Ausrichten einer Zeile oder eines Zeilenblocks. n gibt an, an welcher Spalte ausgerichtet werden soll. Bei JJC kann n sowohl am Blockanfang als auch am Blockende gesetzt werden. Wird an beiden Stellen n gesetzt, so wird nur die obere Angabe berücksichtigt.
JR][n] JJR][n]
Rechtsbündiges Ausrichten einer Zeile oder eines Zeilenblocks. n gibt an, an welcher Spalte ausgerichtet werden soll. Bei JJC kann n sowohl am Blockanfang als auch am Blockende gesetzt werden. Wird an beiden Stellen n gesetzt, so wird nur die obere Angabe berücksichtigt.
Verschieben (move) von Zeilen oder Zeilenblöcken. M[n] MM..MM Als Zielangaben sind A, B oder O zu benutzen (siehe C / CC). Der Parameter n darf nicht beim Block-Kommando (MM) benutzt werden.
Beispiele: Eingabe:
bewirkt:
00001 PROC MEANS; M0002 RUN; A0003 PROC FREQ; 00004 00005
00001 PROC MEANS 00002 PROC FREQ; 00003 RUN; 00004 00005
68
Eingabe:
bewirkt:
M2 01 PROC MEANS; 00002 RUN; A0003 PROC FREQ; 00004 00005
00001 PROC FREQ; 00002 PROC MEANS 00003 RUN; 00004 00005
Eingabe:
bewirkt:
B0001 00002 00003 MM004 00005 00006 00007 00008 MM009
00001 00002 00003 00004 00005 00006 00007 00008 00009
PROC MEANS; RUN; PROC FREQ; CARDS; 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8 ;
R[n] RR[n]
CARDS; 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8 ; PROC MEANS; RUN; PROC FREQ;
Wiederholen von Zeilen oder Zeilenblöcken. n gibt an, wie oft die Einzelzeilen oder Zeilenblöcke wiederholt werden sollen. Die zu wiederholenden Zeilen werden unmittelbar hinter den durch R oder RR gekennzeichneten gesetzt.
Beispiele: Eingabe:
bewirkt:
00001 CARDS; R0002 1 5 8 9 00003 2 4 6 8 00004 00005
00001 00002 00003 00004 00005
Eingabe:
bewirkt:
00001 CARDS; R4002 1 5 8 9 00003 2 4 6 8 00004 00005
00001 00002 00003 00004 00005 00006 00007 00008
Eingabe:
bewirkt:
00001 CARDS; RR002 1 5 8 9 RR003 2 4 6 8 00004 00005
00001 00002 00003 00004 00005 00006
Eingabe:
bewirkt:
00001 CARDS; RR002 1 5 8 9 RR3 3 2 4 6 8 00004 00005
00001 00002 00003 00004 00005 00006 00007 00008 00009
CARDS; 1 5 8 9 1 5 8 9 2 4 6 8
CARDS; 1 5 8 9 1 5 8 9 1 5 8 9 1 5 8 9 1 5 8 9 2 4 6 8
CARDS; 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8
CARDS; 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8 1 5 8 9 2 4 6 8
69
Verbinden zweier Zeilen. Kann in zwei Versionen benutzt werden: • TC in die Zeilennumerierung setzen und die Eingabetaste drücken - Verbindet die Folgezeile mit der gekennzeichneten. • TC in die Zeilennumerierung, Cursor in der gleichen Zeile an gewünschte Position setzen - Verbindet die Folgezeile mit der gekennzeichneten ab der Cursorposition.
TC
Beispiele: Eingabe:
bewirkt:
TC001 00002 00003 00004 00005
00001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
PROC MEANS; RUN; PROC FREQ;
Eingabe:
bewirkt:
TC001 00002 00003 00004 00005
00001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004 00005
PROC _ MEANS; RUN; PROC FREQ;
<[n] <<[n]
Linksverschiebung einer Zeile oder eines Zeilenblocks um n Positionen. Wird n so groß angegeben, daß die Verschiebung über den Zeilenanfang hinausgehen würde, wird nur bis zum Zeilenanfang verschoben (kein Zeichenverlust !)
>[n] >>[n]
Rechtsverschiebung einer Zeile oder eines Zeilenblocks um n Positionen. Analog zu Linksverschiebung - kein Zeichenverlust.
Beispiele: Eingabe:
bewirkt:
>5001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004
00001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004
Eingabe:
bewirkt:
>>001 PROC MEANS; 00002 RUN; >>503 PROC FREQ; 00004
00001 00002 00003 00004
Eingabe:
bewirkt:
<<001 PROC MEANS; 00002 RUN; <<11 PROC FREQ; 00004
00001 PROC MEANS; 00002 RUN; 00003 PROC FREQ; 00004
PROC MEANS; RUN; PROC FREQ;
70
11 Anhang: Beispiele zur Prozedursyntax Im Folgenden wird die Prozedursyntax einiger Standardprozeduren beschrieben. Die Prozedursyntax wird in möglichst vollständiger Form dargestellt und kurz erläutert, auch wenn für Prozedurabläufe nicht immer das komplette Syntaxspektrum benötigt wird. Detaillierte Prozedurbeschreibungen können der Sekundärliteratur entnommen werden (siehe Literaturverzeichnis).
11.1 PROC FACTOR Die PROC FACTOR bietet eine Reihe faktoranalytischer Verfahren sowie Hauptkomponentenanalysen an. Eingabedaten können als Rohdaten, Korrelations- oder Kovarianzmatrizen vorliegen. Da die Prozedur eine umfangreiche Verfahrenspalette bietet, ist die Syntaxbeschreibung recht umfangreich. PROC FACTOR DATA=Dateiname TARGET=datei OUT=datei OUTSTAT=datei METHOD | M= PRINCIPAL | PRIN | P PRINIT ULS | U ALPHA | A ML | M HARRIS | H IMAGE |I PATTERN SCORE COVARIANCE | COV WEIGHT MAXITER=n CONVERGE=c | CONV=c HEYWOOD | HEY ULTRAHEYWOOD | ULTRA PRIORS= ONE | O MAX | M SMC | S ASMC | A INPUT | I RANDOM | R NFACTORS | NFACT=q PROPORTION=p | PERCENT=p | P=p MINEIGEN=n | MIN=n ROTATE | R= NONE | N VARIMAX | V QUARTIMAX | Q EQUAMAX | E ORTHOMAX GAMMA=n HK HKPOWER=n | HKP=n PROMAX | P POWER=n PRE=name PROCRUSTES NORM=KAISER | WEIGHT | NONE | RAW SIMPLE | S CORR | C MSA SCREE EIGENVECTORS | EV PRINT RESIDUALS | RES PREPLOT PLOT NPLOT=n SCORE ALL REORDER | RE ROUND FLAG=q FUZZ=q NOINT NOCORR SINGULAR=p | SING=p; BY varliste; FREQ variable; PARTIAL varliste; PRIORS kommunalitäten; VAR variablen; WEIGHT variable; Dateioptionen
71
DATA=Dateiname TARGET= OUT= OUTSTAT= METHOD= | M= PRINCIPAL | PRIN | P PRINIT ULS | U ALPHA | A ML | M HARRIS | H IMAGE | I PATTERN SCORE COVARIANCE | COV WEIGHT MAXITER= CONVERGE= | CONV= HEYWOOD | HEY ULTRAHEYWOOD | ULTRA PRIORS= ONE | O MAX | M SMC | S INPUT | I RANDOM |R NFACTORS= | NFACT= | N= PROPORTION= | PERCENT= | P= ROTATE= | R= NONE | N VARIMAX | V QUARTIMAX | Q EQUAMAX | E ORTHOMAX GAMMA= HK HKPOWER= | HKP= PROMAX | P POWER= PREROTATE= | PRE= PROCRUSTERS NORM= KAISER WIEGHT NONE | RAW SIMPLE | S CORR | C MSA SCREE EIGENVECTORS | EV PRINT RESIDUALS | RES PREPLOT PLOT NPLOT= SCORE ALL REORDER | RE ROUND FLAG=q FUZZ=q NOINT
zu verarbeitende Datei Datei mit Zielfaktormatrix für PROCRUSTES-Rotation Ausgabedatei für Faktorenscores Ausgabedatei u.a. für Faktorladungen und scoring-Koeffizienten Methodenoptionen Lösungsmethode Hauptkomponentenlösung iterierte „principal factor“-Lösung mit PRIORS=ONE ungewichtete kleinste Quadrate Alpha-Faktorenanalyse „maximum likelihood“-Faktorenanalyse Harris Komponentenanalyse Hauptkomponentenanalyse der Image-Kovarianzmatrix Verarbeitung von Faktorenmatrizen Verarbeitung von Score-Koeffizienten Faktorisierung der Kovarianzmatrix Faktorisierung der gewichteten Korrelations- bzw. Kovarianzmatrix maximale Anzahl Iterationen bei M=PRINIT, ULS, ALPHA, ML (default=30) Konvergenzkriterium bei M=PRINIT,ULS,ALPHA,ML (default=.001) jede Kommunalität >1 wird =1 gesetzt Kommunalitätenschätzung läßt Kommunalitäten > 1 zu Methode zur Kommunalitätenschätzung Kommunalitäten werden auf 1 gesetzt Eingangsschätzung: pro Variable der Betrag der höchsten Korrelation Quadrat der multiplen Korrelation zwischen der Variablen und allen übrigen Einlesen der Eingangsschätzungen über DATA= Eingangsschätzungen=Zufallszahlen zwischen 0 und 1 Anzahl der Faktoren maximale Faktorenzahl (default: = Anzahl Variablen) Mindestanteil der „erklärten“ Varianz Rotationsoptionen Rotationsmethode keine Rotation (Defaultwert) Varimaxrotation Quartimaxrotation Equamaxrotation Orthomaxrotation Gewicht für die Orthomaxrotation Harris-Kaiser Orthoblique-Rotation Potenz der Quadratwurzeln der Eigenwerte (für R=HK; default: 0) Promaxrotation Potenz zur Berechnung des Zielmusters (für R=P; default: 3) Vorrotationsmethode für die PREMAX-Rotation schifwinklige Zielrotation Normierung der Zeilen des Faktormusters Kaiser-Normierung Gewichtung der Reihen nach der Cureton-Mulaik-Methode keine Normierung zusätzliche Statistiken und Druckausgabeoptionen Mittelwerte und Standardabweichungen Korrelationsmatrix Partialkorrelationen für jedes Variablenpaar Scree-Plot der Eigenwerte Ausgabe der Eigenvektoren Ausgabe des Faktorenmusters oder der Scorekoeffizienten Residualkorrelationsmatrix Plot der Faktormuster vor der Rotation Plot der Faktormuster nach der Rotation Anzahl der zu plottenden Faktoren Faktorscore-Koeffizienten maximale Druckausgabe (ohne Plots) Ausgabe der Variablen mit der höchsten Ladung zuerst Multiplikation der Korrelationen und Ladungen mit 100 und Rundung mit ROUND: Werte mit Betrag > q werden markiert Korrelationen oder Ladungen mit Absolutwert < q werden als „missings“ ausgegeben keine Verwendung von Intercept
72
NOCORR
keine Ausgabe der Korrelationsmatrix in die OUTSTAT-Datei (bei M=PATTERN oder SCORE) Singularitätskriterium für die Korrelationsmatrix (default: 1E-8)
SINGULAR= | SING=
11.2 PROC FREQ PROC FREQ berechnet statistische(n) Tests.
Häufigkeits-
und
Kontingenztabellen
mit
und/oder
ohne
PROC FREQ DATA = Dateiname ORDER = DATA | FORMATTED | FREQ | INTERNAL | PAGE; BY Varliste; TABLES Tabellen / ALL ALPHA=p CELLCHI2 CHISQ CMH CMH1 CMH2 CUMCOL DEVIATION EXACT EXPICTED LIST MEASURES MISSING MISSPRINT NOCOL NOCUM NOFREQ NOPERCENT NOPRINT NOROW OUT=Datei SCORES= MODRIDIT | RANK | RIDIT | TABLE | SPARSE; WEIGHT Variable; DATA=Dateiname ORDER=
BY TABLES
ALL ALPHA=p CELLCHI2 CHISQ CMH CMH1 CMH2 CUMCOL DEVIATION EXACT EXPECTED LIST MEASURES MISSING MISSPRINT NOCOL NOCUM NOPERCENT NOPRINT NOROW OUT=Datei SCORES= WEIGHT Variable
zu analysierende SAS-Datei Datenanordnung in der Ausgabe: DATA - wie in der analysierten Datei FORMATTED - nach formatierten Werten FREQ - nach Häufigkeiten INTERNAL - unformatiert (default) Getrennte Analysen nach BY-Gruppen Tabellenanforderung: 1fach: TABLES Variablenliste 2fach: TABLES Var1*Var2 nfach: TABLES Var1*Var2*...*Varn oder (Variablenliste)*(Variablenliste) Berechnung aller Statistiken Konfidenzintervalle 100*(1-p) 2 Zellbeitrag zum x Test auf Homogenität oder Unabhängigkeit für jede Schicht (bei mehr als 2 2 2 2 Dimensionen) mit Pearson- x , Likelihood-Ratio- x , Mantel-Haenszel- x , f ,Kontingenzkoeffizient, Cramers V und fishers exakter Test bei 2x2-Tabellen Cochran-Mantel-Haenszel-Statistiken wie oben, jedoch nur Korrelationsstatistik wie CMH, jedoch nur Korrelations- und Anova-Stastistik kummulative Spaltenhäufigkeiten Abweichung der Zellenhäufigkeit vom Erwartungswert Fishers exacter Test (für >= 2x2-Kontingenztabellen erwartete Häufigkeiten (nur ohne LIST !) Listenausgabe (keine Tabellen) Assoziationsmaße mit asymptotischem STE (ASE) Missings in Berechnungen einbeziehen Ausgabe fehlender Werte keine Zeilenhäufigkeiten keine kumulierten Werte keine Prozentwerte keine Druckausgabe (in Verb. mit OUT=) keine Zeilenprozente Ausgabedatei für Tabellen Reihen- und Spalten-Scores für Mantel-Haenszel-Statistik und Pearson-Korrelation Gewichtungsvariable(n)
11.3 PROC MEANS
73
PROC MEANS berechnet deskriptive Statistiken - gemäß Voreinstellung Anzahl Beobachtungen (N), Minimum (MIN), Maximum (MAX), Mittelwert (MEAN) und Standardabweichung (STD). PROC MEANS DATA=Dateiname DESCENDING FW = Breite MAXDEC = n MISSING NOPRINT NWAY ORDER = DATA | EXTERNAL | FORMATTED | FREQ | INTERNAL VARDEF = DF | N | WDF | WGT CSS CV KURTOSIS MAX MIN MEAN N NMISS PRT RANGE SKEWNESS STD STDERR SUM SUMWGT T USS VAR; BY Varliste; CLASS Varliste; FREQ Variable; OUTPUT OUT=Datei MAXID | MINID (var1(id1)....(varn(idn)=namensliste stat=liste stat(varliste)=liste stat= stat(varliste)=; VAR Variablenliste; WEIGHT Variable; DATA=Dateiname DESCENDING FW= IDMIN MAXDEC=n MISSING NOPRINT NWAY ORDER VARDEF=
BY Varliste CLASS Varliste OUTPUT OUT=Datei MAXID | MINID
stat VAR WEIGHT
zu verarbeitende SAS-Datei Ausgabe absteigend nach _TYPE_-Wert Feldbreite für Ausgabewerte (default 12) kleinster Wert der ID-Variablen Anzahl Nachkommastellen in der Ausgabe Missing-Werte als Klassen keine Druckausgabe (mit OUTPUT) Ausgabe nur für höchste _TYPE_-Werte Stufenanordnung der CLASS-Variablen (Zuordnung siehe PROC FREQ) Nenner für die Berechnung von Varianzen und Kovarianzen: N: Anzahl Beobachtungen DF: N-1 WGT: Summe der Gewichte WDF: WGT-1. By-Gruppen-Angabe (Sortierung erforderlich) Class-Variablen (keine Sortierung erforderlich). Prozedurausgabe auf Datei Dateiname für die Augabe Verknüpfung des größten/Kleinsten Wertes einer Analysevariablen mit dem Wert einer Identifizierungsvariablen: var1,..,varn - Analysevariablen id1,..,idn - Identifizierungsvariablen namensliste - Namen für Kombinationen Statistikanforderungen: varliste - Namen der Analysevariablen liste - Ergebnisvariablen zu analysierende Variablen (fehlt VAR, werden alle numerischen Variablen ausgewertet) Gewichtungsvariable(n)
74
11.4 PROC PRINCOMP PROC PRINCOMP führt Hauptkomponentenanalysen durch. Datenbasis sind Rohdaten-, Korrelations- oder Kovarianzmatrizen. Ausgegeben werden u.a. Eigenwerte und Eigenvektoren sowie standardisierte und nicht-standardisierte Hauptkomponentenscores. PROC PRINCOMP COVARIANCE | COV DATA=Dateiname N=KompAnzahl NOINT NOPRINT OUT=datei OUTSTAT=datei PREFIX=präfix STANDARD | STD; BY variablen; FREQ Nvar; PARTIAL variablen; VAR varliste; WEIGHT variable; COVARIANCE | COV DATA=Dateiname N= NOINT NOPRINT OUT= OUTSTAT= PREFIX= STANDARD | STD BY FREQ PARTIAL VAR WEIGHT
Hauptkomponenten aus Kovarianzen bestimmen zu bearbeitende Datei Anzahl zu berechnender Komponenten keine Korrektur der Kovarianzen bzw. Korrelationen in Hinblick auf Mittelwerte keine Druckausgabe Ausgabedatei für Originaldaten und Hauptkomponenten Ausgabedatei für statistische Kennwerte Präfix für Komponenten (default: PRIN) Standardisierung der Komponentenwerte in der OUT-Datei BY-Gruppen-Definition jede Beobachtung entspricht Nvar Beobachtungen der Effekt der genannten Variablen wird herauspartialisiert zu analysierende Variablen Gewichtungsvariable für jede Beobachtung (Wert >=0)
11.5 PROC PRINT Die PROC PRINT gibt Inhalte von Dateien aus. PROC PRINT DATA=Dateiname DOUBLE | D LABEL | L N NOOBS ROUND | R SPLIT= | S=zeichen UNIFORM | U; BY varliste; PAGEBY variable; SUM variable; SUMBY variable; VAR varliste; DATA=Dateiname DOUBLE | D LABEL | L N NOOBS ROUND | R SPLIT=zeichen S=zeichen UNIFORM | U BY PAGEBY SUM SUMBY VAR
Name der auszugebenden Datei vordoppelt die Zeilenzwischenräume Ausgabe der Variablenlabel (sonst Variablenname) Ausgabe der Anzahl der Beobachtungen unterdrückt die Beobachtungsnummern in der Ausgabe Runden auf zwei Nachkommastellen Zeichen für Zeilenumbruch in Variablenlabeln jede Seite mit gleichen Einstellungen ausgeben getrennte Ausgabe für BY-Gruppen neue Seite beim Wechsel der BY-Variablen Summe für genannte Variable ausgeben Teilsummenausgabe beim Wechsel der BY-Variablen auszugebende Variablen (sonst Ausgabe aller Variablen)
75
11.6 PROC REG PROC REG liefert Parameterschätzungen nach der Methode der kleinsten Quadrate für lineare Regressionsmodelle. PROC REG DATA=Dateiname OUTEST=datei OUTSSCP=datei NOPRINT SIMPLE USSCP ALL COVOUT SINGULAR=n; ADD variable; BY varliste; DELETE varliste; FREQ variable; ID variable; VAR varliste; WEIGHT variable; [Label:] MODEL abhängige Variable = unabhängige Variable / NOPRINT ALL XPX I PARTIAL NOINT SS1 SS2 STB TOL VIF COVB CORRB SEQB COLLIN COLLINOINT; OUTPUT OUT=datei PREDICTED= | P= RESIDUAL= | R= L95M= U95= L95= U95= STDP= STDR= STDI= STUDENT= ; RESTRICT gleichungen; [Label:] TEST gleichung / PRINT;
DATA=Dateiname OUTEST=datei OUTSSCP=datei NOPRINT SIMPLE USSCP ALL COVOUT SINGULAR=n ADD BY DELETE FREQ ID VAR WEIGHT MODEL NOPRINT ALL XPX I PARTIAL NOINT SS1 / SS2 STB TOL VIF COVB CORRB SEQB COLLIN COLLINOINT P R CLM CLI
Name der Asugabedatei Datei für die Ausgabe der Parameterschätzungen Datei für die Ausgabe der Quadrate-Kreuzproduktmatrix keine Druckausgabe einfache deskriptive Statistiken für alle Variablen Druckausgabe der unkorrigierten QuadratsummenKreuzproduktmatrix Ausgabe aller Statistiken Ausgabe der Kovarianzmatrix Singularitätskriterium (default p=1E-8) Hinzufügen von MODEL- oder VAR-Variablen Bildung von BY-Gruppen Löschen von Variablen aus dem Modell jede Beobachtung entspricht numvar Beobachtungen Identifizierung von Beobachtungen Auszugebende Variablen Gewichtungsvariablen Spezifikation einer Modellgleichung keine Druckausgabe Ausgabe aller Statistiken Ausgabe X’X-Kreuzproduktmatrix -1 Ausdruck von X’X Partialregressionsplots unterdrückt Interzept-Term Quadratsummen-Typ standardisierte Regressionskoeffizienten Toleranzwert für jede Variable Varianzinflation der Variablen Kovarianzmatrix der Parameterschätzungen Korrelationsmatrix der PS sukzessive Parameterschätzungen Kollinearitätsanalyse wie COLLIN mit ausschuß des Interzeps Berechnung der vorhergesagten Werte Analyse der Residuen Vertrauensintervallgrenzen des Erwartungswertes der Kriteriumsvariablen Vertrauensintervallgrenzen des vorhergesagten Wertes für jede Beobachtung
76
OUTPUT OUT=datei PREDICTED= | P= RESIDUAL= | R= L95M / U95M L95 / U95 STDI STUDENT RESTRICT TEST
Ausgabedatei vorhergesagte Werte Residuen untere / obere Grenze des 95%-Vertrauensintervalls für den Erwartungswert wie oben - für den vorhergesagten Wert Standardfehler des vorhergesagten Wertes studentized Residuen (durch Standardfehler dividiert) Restriktionen für Parameterschätzungen Testen linearer Hypothesen
11.7 PROC SIMLIN Die Prozedur PROC SIMLIN liest Koeffizienten struktureller Gleichungen (i.d.R. erzeugt durch die Prozedur SYSLIN), berechnet die reduzierte Form und verwendet diese zum Errechnen von Prognosen. PROC SIMLIN DATA=Dateiname ETS=Dateiname ESTPRINT INTERIM=n NOPRINT NORED OUTEST=datei START=n TOTAL TYPE=wert; BY variablen; ENDOGENOUS variablen; EXOGENOUS variablen; ID variablen; LAGGED v-variable e-variable verzögerung; OUTPUT OUT=Dateiname PREDICTED= | P= variablen RESIDUAL= | R= namen; DATA=Dateiname EST=Dateiname ESTPRINT INTERIM=n NOPRINT NORED OUTEST=datei START=n TOTAL TYPE= BY ENDOGENOUS EXOGENOUS ID LAGGED
OUTPUT OUT=datei PREDICTED= | P=variablen RESIDUAL= | R=namen
zu verarbeitende Datei Datei mit Schätzungen Ausgabe des Inhalts der unter EST= angegebenen Datei Interimanzahl unterdrückt Druckausgabe unterdrückt Ausgabe der reduzierten Form Ausgabedatei für geschätzte Parameter Nummer der ersten zu berücksichtigenden Beobachtung Einbeziehung aller Werte (sonst nur LAG<0) Parametertyp (= _TYPE_-Wert aus der EST=-Datei) Gruppierungsvariablen Liste endogener Variablen Liste exogener Variablen Übernahmevariablen für die OUT=-Datei v-variable: verzögerte Variable e-Variable: endogene Variable verzögerung: Grad der Verzögerung Ausgabedatei auszugebende endogene Variablen auszugebende Residuen
77
11.8 PROC SORT Die Prozedur PROC SORT sortiert Dateien nach einer sog. „collating sequence“, bspw. ASCII. PROC SORT ASCII DATA=Dateiname EBCDIC EQUALS FORCE NODUPKEY NODUPLICATES | NODUPREC | NODUP OUT=datei REVERSE; BY [DESCENDING] variablen DESCENDING variable; DATA=Dateiname ASCII EBCDIC EQUALS FORCE NODUPKEY NODUPLICATES | NODUPREC | NODUP OUT=datei REVERSE BY DESCENDING
zu sortierende Datei Sortierung nach ASCII Sortierung nach EBCDIC Beobachtungen mit gleichen BY-Werten behalten ihre relative Position sortiert indizierte Datensätze (Index wird gelöscht) Beobachtungen mit gleichen BY-Werten nicht in die Ausgabedatei Beobachtungen mit Übereinstimmungen in allen Variablen werden nicht in die Ausgabedatei übernommen Ausgabedatei (sonst Eingabe=Ausgabe) Sortierung alphanumerischer Variablen mit umgekehrter Sequenz zu sortierende Variable(n) (Sortierung aufsteigend) kehrt Sortierreihenfolge um
11.9 PROC SUMMARY Arbeitet wie PROC MEANS, jedoch mit dem Unterschied, daß standardmäßig keine Statistiken berechnet werden und beim Fehlen einer Variablenliste nur die Anzahl der Beobachtungen ausgegeben wird. PROC SUMMARY DATA=Dateiname DESCENDING FW = Breite MAXDEC = n MISSING NOPRINT NWAY ORDER = DATA | EXTERNAL | FORMATTED | FREQ | INTERNAL VARDEF = DF | N | WDF | WGT CSS CV KURTOSIS MAX MIN MEAN N NMISS PRT RANGE SKEWNESS STD STDERR SUM SUMWGT T USS VAR; BY Varliste; CLASS Varliste; FREQ Variable; OUTPUT OUT=Datei MAXID | MINID (var1(id1)....(varn(idn)=namensliste stat=liste stat(varliste)=liste stat= stat(varliste)=; VAR Variablenliste; WEIGHT Variable; Beschreibung der Prozeduranweisungen und -parameter siehe PROC MEANS.
78
11.10 PROC SYSLIN Die PROC SYSLIN wird für Schätzungen und Analyse von Parametern linearer Gleichungssysteme, wie sie beispielsweise bei ökonometrischen Modellen auftreten, benutzt. PROC SYSLIN DATA=Dateiname OUT=Dateiname OUTEST=Datei OUTCOV | COVOUT OLS ALL NOPRINT REDUCED SIMPLE SINGULAR=wert; BY variablen; ENDOGENOUS variablen; INSTRUMENTS variablen; MODEL regressand=regressor(en); IDENTITY ausdruck; OUTPUT PREDICTED=variablen | P=variablen RESIDUAL=variablen | R=variablen; TEST ausdruck; VAR variablen; WEIGHT variable;
DATA=Dateiname OUT=Datei OUTEST=Datei OUTCOV | COVOUT OLS ALL NOPRINT REDUCED SIMPLE SINGULAR=wert BY ENDOGENOUS= INSTRUMENTS= MODEL regressand=regressor IDENTITY ausdruck PREDICTED=variablen RESIDUAL=variablen TEST ausdruck VAR variablen WEIGHT variable
Eingabedatei Ausgabedatei Ausgabedatei für estimated parameter Ausgabe de Covarianzen Ausgabe der ordinary least squares Ausgabe aller berechneter Werte keine Druckausgabe reduziertes Prognosemodell (nur mit IDENTITY) einfache deskriptive Statistiken für endogene Variable Singularitätskriterium für die Kreuzproduktmatrix (default =1E-8) Bildung von BY-Gruppen Definition endogener Variablen Definition der Instrumenten-Variablen (i.d.R. alle prädeterminierten Variablen) Modellspezifikation Identitätsgleichung Modellvariablen Residuen Testhypothese zusätzliche, im MODEL nicht enthaltene Variabeln für die Kreuzproduktmatrix Gewichtungsvariable
79
11.11 PROC TTEST PROC TTEST berechnet zweiseitige t-Tests für unabhängige Stichproben. Sind die Varianzen ungleich, wird t näherungsweise (Behrens-Fisher) und DF nach Satterthwaites berechnet. PROC TTEST COCHRAN DATA=Dateiname; BY varliste; CLASS variable; VAR variablen; COCHRAN DATA=Dateiname BY CLASS VAR
bei ungleichen Varianzen Schätzung von t nach Cochran & Cox zu bearbeitende Datei BY-Gruppen-Angabe Variable mit Gruppeneinteilung (max zwei Stufen) zu analysierende Variablen. Werden keine angegeben, Auswertung aller numerischen, außer evtl. definierten CLASS-Variablen
11.12 PROC UNIVARIATE PROC UNIVARIATE berechnet univariate deskriptive statistische Kennwerte, Box-Whisker-, stem-and-leaf- und Normalverteilungsplots, prüft auf Normalverteilung und berechnet einen zweiseitigen Wilcoxon-Test für abhängige Stichproben. PROC UNIVARIATE DATA=Dateiname FREQ NOPRINTNORMAL PCTLDEF=Wert PLOT ROUND=werteliste VARDEF=DF | N | WGT | WEIGHT | WDF; BY varliste; FREQ variable; ID varliste; OUTPUT OUT=datei statistiken PCTLNAMES=suffixliste PCTLPTS=percentilwert PCTLPRE=präfixliste; VAR variable; WEIGHT variable; DATA=Dateiname FREQ NOPRINT NORMAL PCTLDEF PLOT ROUND VARDEF
BY FREQ ID OUTPUT OUT=datei statistiken PCTLPTS PCTLNAMES PCTLPRE VAR WEIGHT
zu bearbeitende Datei Häufigkeitstabellen keine Druckausgabe Normalitätstest (bei n>2000 Kolmogorov, bei n<=2000 Shapiro-Wilk W-Statistik) Verfahren der Perzentillberechnung (default für Wert: 5) Box-Whisker, stem-and-leaf- und Normalverteilungsplot Rundungseinheiten für Variable Nenner für die Berechnung von Varianzen und Kovarianzen: N: Anzahl der Beobachtungen DF: N-1 WGT: Summe der Gewichte WDF: WGT-1 BY-Gruppen-Definition Häufigkeitstabelle der Variablenwerte Variablen zu Identifizierung der 5 größten und 5 kleinsten Werte Generierung einer Ausgabedatei Name der Ausgabedatei gewünschte statistische Kennwerte Perzentilwerte Perzentilnamen ( suffix) Namenspräfix für PCTLNAMES zu analysierende Variablen (default: alle numerischen Variablen) Variable zur Berechnung gewichteter Mittelwerte und Varianzen (muß >= 0 sein)
80
12 Literaturliste •
J.Gogolok, R.Schuemer, G.Ströhlein: Datenverarbeitung und statistische Auswertung mit SAS. Band I: Einführung, Datenmanagement und Auswertung G.Fischer Verlag Stuttgart 1992
•
Th.Göttsche:
SAS kompakt für die Vers. 6 G.Fischer Verlag Stuttgart 1992
•
Th.Göttsche:
Einführung in das SAS-System für den PC G.Fischer Verlag Stuttgart 1990
•
R.Schuemer, G.Ströhlein, J.Gogolok: Datenverarbeitung und statistische Auswertung mir SAS. Band II: Komplexe statistische Analyseverfahren G.Fischer Verlag Stuttgart 1990
•
SAS Institute GmbH:
Eine Einführung in das SAS-System Version 6, 2. Auflage SAS Institute GmbH Heidelberg 1994
•
SAS Institute Inc.:
SAS Language Reference Vers. 6 First Edition SAS Institute Inc. Cary, NC, USA 1994
•
SAS Institute Inc.:
SAS Language and Procedures Usage 1/2, Vers. 6 First Edition SAS Institute Inc. Cary, NC, USA 1993
•
SAS Institute Inc.:
SAS Language and Procedures Syntax, Vers. 6 First Edition SAS Institute Inc. Cary, NC, USA 1994
•
SAS Institute Inc.:
SAS Technical Report P-242 SAS Software: Changes and Enhancements. Rel. 6.08 SAS Institute Inc. Cary, NC, USA 1993
•
SAS Institute Inc.:
SAS Companion for UNIX Environments: Language Version 6 First Edition SAS Institute Inc. Cary, NC, USA 1993
• SAS Institute Inc.:
SAS Companion for UNIX Environments: User Interfaces Version 6 First Edition SAS Institute Inc. Cary, NC, USA 1993