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...
42 downloads
522 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
= ^= > >= ^> < 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 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