URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Das Datenanalysesystem SAS Einführung in die Programmierung 3-halbtägiger Blockkurs, WS 2008/2009 Dr. Carina Ortseifen, URZ Heidelberg Kursaufbau Mittwoch, 28.01. – Freitag, 30.01.2009 13:00 - 17:00 im R 118 C. Ortseifen 1 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Literatur Folien und Aufgaben stehen im Internet zur Verfügung (URZ-Homepage > Programme > Statistik > SAS > Kursunterlagen zu SAS-Kursen). SAS Online-Hilfe (Hilfe-Menü) SAS Online-Doku im WWW http://support.sas.com/documentation/ onlinedoc/index.html SAS Language Reference SAS Procedures Guide SAS/STAT Weitere Literatur Das SAS-Anwenderhandbuch im Netz www.urz.uni-heidelberg.de/statistik/sas-ah Dort im Kapitel 5: Carina Ortseifen: Der SAS-Kurs Weitere Lehrbücher über die URZ-Homepage www.urz.uni-heidelberg.de: Programme > Statistik > SAS > Bücherliste > Lehrbücher zu SAS C. Ortseifen Redscope.org, http://www.redscope.de 2 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Themen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 1. 2. 3. 4. 5. 6. 7. 8. Voraussetzungen C. Ortseifen Gültige Benutzerkennung fürs URZ und Besuch des Kurses ‚Das Datenanalysesystem SAS – Einführung mit dem SAS Enterprise Guide‘ oder gleichwertige Kenntnisse Teilnahmebescheinigung bei Anwesenheit 3 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Begriffe SAS-Tabelle Variable, Beobachtung, Wert Variablentyp, Label (Etikett) Format, Informat Bibliothek Anwendungsroutinen Datenschritt Prozedurschritt (Proc Means, Proc Sql) Globale Anweisungen (Title, Footnote) Themen 1. 2. 3. 4. 5. 6. 7. 8. C. Ortseifen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 4 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung SAS Version 9 Installiert ist: SAS 9.1.3 SP4 Englisch und Deutsch Programmierumgebung (Code-Fenster) mit Windows-Elementen: Menüleiste Icons Editor-, Log- und Outputfenster Explorer und Resultfenster Menüleiste SASExplorer Kommando -zeile Symbolleiste (Tools) Protokollfenster (Log) Editorfenster (Code) C. Ortseifen Ausgabefenster (Output) 5 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Arbeitsweise SAS-Programme in den Editor laden (oder neu schreiben), ausführen und Ergebnisse betrachten Programm ausführen über Menü (Run > Submit), Icon , Funktionstaste F3, RM Submit All oder Kommando Submit Hilfe zu einzelnen Prozeduren Kommando help Prozedurname Beispiel: help Print Beispielprogramm Ods RTF File="m:\class.rtf"; Title "Tabelle sashelp.class"; Proc Print Data=sashelp.class; Run; Proc Freq Data=sashelp.class; Tables sex ; Run; Ods RTF Close; C. Ortseifen 6 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Aufbau von SAS-Programmen Ods RTF ... Globale Anweisungen Title Datenschritte Data ... ; Run; Prozedurschritte Proc Print ... Proc Freq ... Run; SAS-Anweisungen Daten- und Prozedurschritte bestehen aus Anweisungen. Anweisungen werden durch ein Schlüsselwort eingeleitet (z.B. Data, Proc, Run, Title) und enden mit einem Semikolon (;). Proc Freq .... ; Optionen wählen Aktionen aus oder ändern Voreinstellungen ab. Proc Print Data=sasuser.adressen; C. Ortseifen 7 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Meldungen im Protokollfenster Note Hinweis zur Abfolge des Programms (Dauer, welche Datei(en) wurde(n) angelegt/gelöscht) Warning SAS ist auf einen behebbaren Fehler gestoßen. Der Daten- oder Prozedurschritt wurde vollständig ausgeführt. Error Der Fehler konnte nicht behoben werden. Der Programmschritt wurde abgebrochen. Themen 1. 2. 3. 4. 5. 6. 7. 8. C. Ortseifen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 8 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung SAS-Bibliotheken sind (Unter-) Ordner, die SAS-Tabellen und SAS-Kataloge enthalten. Um nicht immer den gesamten Pfad schreiben zu müssen, vergibt SAS Kürzel für die Ordner: Bibliotheksname (oder libref). Definition über die Libname-Anweisung SAS/EG vergibt eigene Bibliotheksnamen. (Anzeige zur Ziehen der Tabelle ins Code-F.) Bibliotheken verwalten (Libname) C. Ortseifen über den SAS Explorer Doppelklick auf Explorer zeigt die aktuellen Bibliotheken an. Zurück mit Rechte Maustaste (RM) auf einer Bibliothek: Anzeige der Eigenschaften, Löschen u. a. m. 9 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Bibliotheken Work Sasuser Sashelp Maps Local (SAS/Enterprise Guide) temporärer Arbeitsbereich Arbeitsbereich des Anwenders SAS-Arbeitsbereich Bibliothek mit Landkartendaten Eigene Bibliotheken definieren Anweisung Libname. Beispiel: Libname urz 'O:\Kurs\sas\daten'; Schlüsselwort Libname Bibliotheksname Pfadangabe Allgemeine Syntax: Libname bib engine 'Pfad'; Engine (Dateiform, z.B. SPSS, Excel) C. Ortseifen 10 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Zugriff auf Excel-Tabellen Libname schule 'O:\Kurs\sas\daten\schule.xls'; Besonderheiten: Als Pfad steht eine komplette Datei. Für jedes Arbeitsblatt und für jeden Namensbereich wird eine SAS-Tabelle angelegt. Excel 2007-Tabellen können nicht gelesen werden. SAS Explorer C. Ortseifen Ähnlich wie Windows-Explorer viele Funktionalitäten auf rechter Maustaste (RM) Anzeige und Bearbeiten von Tabellen, Bibliotheken und Katalogen Erzeugen neuer Bibliotheken, Filerefs, Tabellen und Katalogen Kopieren und Export von Dateien 11 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Tabelleninformationen Tabelle anklicken, RM > Properties liefert: Allgemeine Optionen Details Indizes Spalten (= Variablenfenster) Eintragungen, die sich ändern lassen, haben Popup-Menü. Variablenfenster (auch über RM > View columns) Anzeige der Variablen samt Eigenschaften Name, Etikett, Ausgabe- und Einleseformat können über das RM-Menü Modify geändert werden (Nicht: Variablentyp und Länge!) C. Ortseifen 12 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Tabellenansicht und zurück Doppelklick auf die Tabelle öffnet sie mit dem Befehl Viewtable Tabelle umbenennen: Tabelle markieren, RM > Rename Mit View > Up one level kehrt man eine Ebene im Explorer zurück (oder dem Icon ). Themen 1. 2. 3. 4. 5. 6. 7. 8. C. Ortseifen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 13 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Prozedur Print Darstellen der Datenwerte einer SAS-Tabelle im Ausgabefenster Der einfachste Aufruf Proc Print Data=sasuser.adressen; Run; gibt die SAS-Tabelle sasuser.adressen vollständig mit allen Variablen und Beobachtungen aus. Einschränkungen / Änderungen C. Ortseifen Nur bestimmte Variablen Î Anweisung Var Nur bestimmte Beobachtungen / Teilmenge Î Dateioptionen Obs= und Firstobs= Î Anweisung Where Beobachtungen in einer anderen Reihenfolge Î Prozedur Sort Listen getrennt nach bestimmten Gruppen Î Anweisung By 14 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Anweisung Var Sollen nicht alle Variablen ausgegeben oder die Variablen in anderer Reihenfolge dargestellt werden, verwendet man die Anweisung Var. Proc Print Data=sasuser.adressen; Var name alter; Run; Variablenbereiche Benennung einzelner Variablen: Var name alter; mit geänderter Reihenfolge: Var wohnort alter name; Gleicher Präfix: Gleicher Präfix und numerische Endung: Var tag: ; Var tag1-tag5; Variablenbereiche innerhalb der Datei: Var name--alter; C. Ortseifen 15 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Variablen ausschließen - Drop= Sollen alle Variablen bis auf wenige dargestellt werden, verwendet man die Dateioption Drop=: Proc Print Data=sasuser.adressen(Drop=ort); Run; Die Dateioptionen folgen dem Tabellennamen in Klammern: (Drop=Variable|Variablenliste) Teilmengen Normalerweise werden Prozedurschritte für alle Beobachtungen ausgeführt. Bei großen Tabellen testet man den Prozedurschritt zunächst mit wenigen Fällen. Manchmal teilt man die Beobachtungen auf und führt Prozedurschritte nur für ausgewählte Beobachtungen aus. Einsatz der C. Ortseifen Dateioptionen Obs= und Firstobs= Anweisung Where! 16 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Firstobs=, Obs= Die Dateioptionen folgen in Klammern dem Tabellennamen: Proc Print Data=sasuser.adressen(Firstobs=11 Obs=15); Run; Firstobs= Nummer der ersten Beobachtung, die verarbeitet wird Obs= Nummer der letzten Beobachtung, die verarbeitet wird Firstobs <= Obs Where-Anweisung C. Ortseifen Beschränkung auf Untergruppen durch Formulierung einer logischen Bedingung, die von den Beobachtungen erfüllt werden muss. Proc Print Data=sasuser.adressen; Where alter>15; Run; Where ist eine lokale Anweisung, die für fast jede Prozedur verwendet werden kann. 17 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Logische Bedingungen Numerische Variablen Where wert=1; Where wert>1; Textvariablen Where id=‘DORLE‘; Where ort in('HD','MA','KA'); Vergleichsoperatoren = eq gleich > gt größer >= ge größer oder gleich in in der Liste enthalten ^= ne ungleich < lt kleiner <= le kleiner oder gleich Kombinierte Bedingungen C. Ortseifen Kombination Where sex=1 and alter>20; Where alter<20 or wohnort="Heidelberg"; Logische Operatoren & and sowohl als auch | or mindestens eins von beiden ^ not nicht (oder auch ~) Klammern können die Lesbarkeit erhöhen Where (sport>2 or sport=.) and alter>20; 18 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Weitere Operatoren Between-And Where x between 1 and 5; Contains Where a contains 'Dr.'; Is null|Is missing Like Genaue Hinweise und Beispiele im SAS-Anwenderhandbuch im Netz unter dem Stichwort Selektion Andere Reihenfolge der Fälle 1. 2. C. Ortseifen Um die Beobachtungen (=Zeilen) der SASTabelle in einer anderen Reihenfolge darzustellen, muß die Tabelle zunächst mit der Prozedur Sort sortiert werden. Anschließend kann die sortierte Tabelle mit der Prozedur Print im Ausgabefenster angezeigt werden. Proc Sort ... ; Run; Proc Print ...; Run; 19 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Prozedur Sort Sortieren erfolgt nach bestimmten Kriterien, die mit der BY-Anweisung formuliert werden. Proc Sort Data=sasuser.adressen; By alter; Run; sortiert die Beobachtungen nach Alter (in aufsteigender Reihenfolge) Prozedur erzeugt keine Ausgabe. Mehrfache Sortierkriterien Beispiel: Telefonbuch Innerhalb einer By-Gruppe wird weiter nach dem nächsten Kriterium sortiert: Proc Sort Data=sasuser.adressen; By wohnort alter name; Run; C. Ortseifen Die Reihenfolge der Variablen entscheidet über die Anordnung der Beobachtungen. 20 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Sortierung in neuer Tabelle Soll eine SAS-Tabelle zwar sortiert, das Resultat aber in einer neuen Tabelle gespeichert werden, um die Ausgangstabelle nicht zu verändern, setzt man die Option Out= ein. Proc Sort Data=sasuser.adressen Out=kurs.sp; By alter; Run; Getrennte Liste – Anweisung By C. Ortseifen Mit einem Prozeduraufruf erhält man getrennte Listen für Untergruppen. Die Anweisung By benennt die Variable(n), die die Untergruppen definiert. Voraussetzung: SAS-Tabelle ist nach der oder den BY-Variablen sortiert. Proc Print Data=sasuser.adressen; Var name alter; By sport; Run; 21 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Häufiger Fehler mit By ERROR: Data Set ...... is not sorted in ascending sequence. The current by-group has Min. = ... and the next by-group has Min. = ... Abhilfe: Einen Prozedur SORT-Schritt vorneweg ausführen. Proc Sort Data=sasuser.adressen; By sport; Proc Print Data=sasuser.adressen; ... Beschriftungen C. Ortseifen Jede Seite im Ausgabefenster kann Titel- und Fußzeilen enthalten. Standardtitel: The SAS System Eigene Titel- und Fußzeilen machen die Ergebnisdarstellungen für Außenstehende verständlicher. TITLE und FOOTNOTE sind globale Anweisungen, d.h. sie werden außerhalb von Daten- und Prozedurschritten definiert. 22 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Beispiele Title1 ’Experiment von Fisher’; Title2 ’Vergleich von 3 Irisarten'; Footnote ’Umfang: je 50 Blüten’; Proc Print Data=kurs.iris; Run; Hinweise Es können bis zu 10 Titel- und Fußzeilen definiert werden. Als globale Anweisungen gelten sie so lange, bis sie geändert oder zurückgesetzt werden. Zurücksetzung: Title ; Footnote ; C. Ortseifen 23 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Globale Einstellungen - Optionen Beim Start der SAS-Sitzung belegt das SASSystem viele Schalter vor durch Konfigurationsfile Sasv9.cfg Anweisungen, die zu Beginn der SAS-Sitzung ausgeführt werden (Datei Autoexec.sas) Nachträgliche Änderung von Einstellungen durch den Benutzer ist möglich durch Titel- und Fußzeilen Optionen (z.B. Seitennumerierung) Einige globale Einstellungen C. Ortseifen Ausgabe des Datums Date Nodate Anzeige der Seitennummern Number / Nonumber Verändern der Seitennummer Pageno=n 24 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Änderung der Einstellungen auf zwei Arten Options-Fenster: Tools > Options > System .. Anweisung Options Options Nodate Nonumber; Options Nodate Pageno=5; Options ist eine globale Anweisung. SAS System Options C. Ortseifen Kommando Option Menü Tools > Options > System … 25 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Spezialitäten Zum Schluß noch zwei Spezialitäten der Prozedur Print: Darstellung der Labels Berechnung von Spaltensummen Die Prozedur Print und Labels Die Prozedur Print zeigt standardmäßig keine Labels an. Zur Erinnerung: Labels sieht/definiert man mit der Anweisung Label oder im Variablenfenster. Erst durch Hinzunahme der Option Label werden sie angezeigt: Proc Print Data=sasuser.adressen Label; Run; C. Ortseifen 26 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Spaltensummen mit Sum Werte von numerischen Variablen können mit der Anweisung Sum spaltenweise summiert werden. Proc Print Data=sasuser.adressen; Sum alter; Run; Zusammenfassung der Syntax Proc Sort Data=SAS-Tabelle <out=SAS-Tabelle>; By Variable|Variablenliste; Proc Print Data=SAS-Tabelle <label>; <Var Variable|Variablenliste;> <sum Variable|Variablenliste;> <Where Logische Bedingung;> title ...; footnote ...; (Drop=...) options ...; C. Ortseifen 27 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Literatur Prozeduren Print und Sort sind Bestandteil von SAS Base: SAS Procedures Guide Globale Anweisungen und Dateioptionen SAS Language Guide Aufgabe C. Ortseifen Erzeugen Sie eine Liste der SAS-Tabelle fitness aus dem Ordner O:\kurs\sas\daten! 28 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Themen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 1. 2. 3. 4. 5. 6. 7. 8. Prozedur Means C. Ortseifen Means (neben Freq und Univariate) ist eine grundlegende Prozedur für die deskriptive Statistik. Sie berechnet wichtige Kennwerte (=statistische Maßzahlen), die in direktem Zusammenhang mit dem Mittelwert stehen, für quantitative Merkmale. Z.B. Mittelwert, Median, Maximum, Minimum, Standardabweichung, Konfidenzintervalle ... 29 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Einfachster Aufruf Proc Means Data=urz.iris; Run; berechnet für alle numerischen Variablen (auch für blume !) die Kennwerte N Anzahl der nichtfehlenden Werte Mean Mittelwert Std Dev Standardabweichung Min/Max kleinster/größter Wert und stellt diese im Ausgabefenster in Form einer Tabelle dar. Anweisung Var beschränkt die Liste der Variablen, für die Kennwerte berechnet werden. Proc Means Data=urz.iris; Var sl pl sw pw; Run; Alternative Lösung: C. Ortseifen Proc Means Data=kurs.iris(Drop=blume); Run; 30 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Anweisung Class Berechnung der Kennwerte getrennt für die durch die Class-Variablen definierten Gruppen Proc Means Data=urz.iris; Var sl; Class blume; Run; Tabelle braucht nicht sortiert (nach blume) vorliegen. Anweisung Output C. Ortseifen Übertragung der Kennwerte in eine neue SAS-Tabelle Proc Means Data=urz.iris; Var sl; Output out=iris_sl; Run; Die Kennwerte werden im Ausgabefenster angezeigt, gleichzeitig wird die SAS-Tabelle iris_sl angelegt. 31 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Mit Output erzeugte Tabelle iris_sl hat - 5 Beobachtungen für die fünf Kennwerte (N, Mean, Std, Min, Max) und - 4 Variablen _Type_, _Freq_, _Stat_ und die eigentliche Variable sl, die die Kennwerte enthält. Option Noprint C. Ortseifen Die Option Noprint unterdrückt die Darstellung der Kennwerte im Ausgabefenster. Proc Means Data=urz.iris Noprint; Var sl; Output out=iris_sl; Run; Das Ergebnis ist die neue SAS-Tabelle iris_sl. 32 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Prozedur Ttest Vergleich von zwei Gruppen hinsichtlich deren Erwartungswerte t-Test für gleiche und ungleiche Varianzen für unabhängige u. abhängige Gruppen Varianzen F-Test Zur Statistik Wie lautet die Null- und wie die Alternativhypothese für den t-Test? Wie wird der Test durchgeführt? Und lautet die Testentscheidung? Und jetzt das ganze für den F-Test! C. Ortseifen 33 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Beispiel: Unabhängiger t-Test Teststatistik T T = wo s 2p = | x1 − x 2 | ~ t n1 + n 2 − 2 1 1 + sp n1 n2 ( n 1 − 1 ) s 12 + ( n 2 − 1 ) s 22 n1 + n 2 − 2 xi Mittelwerte, si Standardabweichungen, ni Fälle Testentscheidung: Wenn |T|>tn1+n2-2,1-α/2 ist, wird H0 verworfen. Einfachster Aufruf Proc Ttest Data=urz.blutbild; Class pille; Var calcium; Run; C. Ortseifen 34 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Kennwerte The TTEST Procedure Statistics Variable PILLE N CALCIUM CALCIUM CALCIUM Diff (1-2) 1 2 Lower CL Mean Mean Upper CL Mean Lower CL Std Dev Std Dev Upper CL Std Dev Std Err 98.818 98.077 -0.681 99.878 99.098 0.78 100.94 100.12 2.2407 4.4124 4.3045 4.5264 5.0588 4.9282 4.9932 5.929 5.7649 5.5683 0.5332 0.5138 0.7403 90 92 t-Test mit Freiheitsgrad, Teststatistik, Irrtumswahrscheinlichkeit (=Ws. unter Nullhypothese) T-Tests Variable Method Variances CALCIUM CALCIUM Pooled Satterthwaite Equal Unequal F-Test DF t Value Pr > |t| 180 180 1.05 1.05 0.2935 0.2936 Equality of Variances Variable Method CALCIUM Folded F Num DF Den DF F Value Pr > F 89 91 1.05 0.8039 Interpretation t-Test Was sagt Pr > |t| 0.2935 aus? Wenn Pr>|t| kleiner gleich dem vorgegebenen Signifikanzniveau α ist, kann die Nullhypothese H0 abgelehnt werden. Wenn Pr>|t| ≤ α, dann H0 ablehnen. C. Ortseifen 35 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Abhängiger t-Test Title 'Abhängiger Vergleich (SAS/Example 77.3)'; Data blutdruck; I Input SBD_vor SBD_nach @@; Datalines; 120 128 124 131 130 131 118 127 140 132 128 125 140 141 135 137 126 118 130 132 126 129 127 135 Run; Proc Ttest Data=blutdruck; Paired sbd_vor*sbd_nach; Run; Abhängiger Vergleich (SAS/Example 77.3) Kennwerte The TTEST Procedure Statistics Difference SBD_vor - SBD_nach N Lower CL Mean Mean Upper CL Mean Lower CL Std Dev Std Dev Upper CL Std Dev Std Err 12 -5.536 -1.833 1.8698 4.1288 5.8284 9.8958 1.6825 t-Test mit Freiheitsgrad, Teststatistik, Irrtumswahrscheinlichkeit (=Ws. unter Nullhypothese) T-Tests C. Ortseifen Difference DF t Value Pr > |t| SBD_vor - SBD_nach 11 -1.09 0.2992 36 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Zusammenfassung der Syntax Proc Means Data=SAS-Tabelle <Noprint>; <Var Variable|Variablenliste;> <Output out=SAS-Tabelle;> <Class Variable|Variablenliste;> Proc Ttest Data=SAS-Tabelle; Class Variable|Variablenliste; <Var Variable|Variablenliste;> <Paired Variable1*Variable2;> <Where Logische Bedingung;> <By Variable|Variablenliste;> Themen 1. 2. 3. 4. 5. 6. 7. 8. C. Ortseifen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 37 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Ausgabe von Prozeduren Standardmäßig: Ausgabefenster Aber: Für Publikationen benötigt man eher Ausgaben im Format Word, PDF oder HTML. Da bedient man sich dem ODS ODS = Output Delivery System ODS RTF SAS unterstützt das Rich Text Format (RTF) für Microsoft Word: ODS Rtf File="liste.rtf"; Proc Print Data=urz.iris; Run; Ods Rtf Close; C. Ortseifen 38 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung ODS HTML Für Publikationen im Internet/Intranet: HTML-Ausgaben ODS Html File="liste.html"; Proc Print Data=urz.iris; Run; Ods Html Close; Standardausgabe: Listing ODS Listing; Proc Print Data=urz.iris; Run; Ods Listing Close; C. Ortseifen 39 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Themen 1. 2. 3. 4. 5. 6. 7. 8. Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro Erzeugen von SAS-Tabellen: Wie und wo liegen die Daten vor? SAS Tabelle EG: Datei > Öffnen Datenschritt mit Set Prozedur SQL Anmerkung: EG: Enterprise Guide Nicht EG: nur mit ‚normalem‘ SAS ausführbar ohne: im Code-Fenster vom EG C. Ortseifen Fremdformat von anderer Anwendung (Excel) Libname-Engine EG: Datei > Öffnen EG: Datei > Daten importieren Prozedur Import ASCII-Datei (Rohwerte) EG: Datei > Daten importieren Datenschritt mit Infile Auf dem Papier Datenschritt mit Datalines (oder Cards) Nicht EG: Prozedur Fsedit mit Option New= 40 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Programm1.sas Data sasuser.adressen; Input name $ vorname $ ort $ alter; Datalines; Meier Hans Walldorf 25 Schulze Karin Mannheim 27 Müller Horst Nußloch 31 Run; Was macht dieses Programm, wenn man es ausführt? Was ist die Aufgabe des Datenschritts? Was tun die einzelnen Anweisungen? Programm2.sas Data sasuser.adneu; Set sasuser.adressen; gruppe=1; land=‘D‘; If alter<30 Then typ=‘junior‘; Else typ=‘senior‘; Run; Was macht dieses Programm? Was ist die Aufgabe des Datenschritts? Was tun die einzelnen Anweisungen? C. Ortseifen 41 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Aufgabe des Datenschritts … ist die Erzeugung von SAS-Tabellen 1. Entweder aus Rohwerten/ASCII-Dateien: Input + Datalines + Datenwerte Input + Cards + Datenwerte Infile + Input (Datalines und Cards sind synonyme Anweisungen.) oder 2. aus vorhandenen SAS-Tabellen: Set Die Anweisung Data C. Ortseifen ist die erste Anweisung im Datenschritt. Dem Schlüsselwort Data folgt der Name der zukünftigen SAS-Tabelle. Data sasuser.adressen; Data sasuser.adneu; Data work.firma; 42 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Ende des Datenschritts Der Datenschritt ist beendet, wenn ein neuer Daten- oder Prozedurschritt beginnt d.h. Data- oder Proc-Anweisung, eine Run-Anweisung auftritt oder nach den Datenzeilen nach einer Datalinesoder Cards-Anweisung Anweisungen und Zuweisungen Jede Anweisung beginnt mit einem Schlüsselwort (Data, Set, Run) und endet mit einem Semikolon (;). Bei einer Zuweisung steht links vom Gleichheitszeichen der Name der neuen Variablen, rechts die Rechenvorschrift. Zuweisungen im SAS EG mit Daten > Filter und Abfrage … > Berechnete Spalten > Neu C. Ortseifen 43 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Anweisung Set bezeichnet die SAS-Tabelle, die in die neue kopiert wird. Diese Tabelle muss existieren. Die Tabelle in der Data-Anweisung kann mit der in der Set-Anweisung übereinstimmen: Data sasuser.adneu; Set sasuser.adneu; alter_klasse=alter/10; Run; Programm2 - Die Zuweisung Data sasuser.adneu; Set sasuser.adressen; gruppe=1; land=‘D‘; If alter<30 Then typ=‘junior‘; Else typ=‘senior‘; Run; Es werden zwei neue Variablen, gruppe und land, gebildet durch Zuweisung eines konstanten Wertes für alle Beobachtungen in der SAS-Tabelle. C. Ortseifen 44 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Programm2 - Bedingte Zuweisung Data sasuser.adneu; Set sasuser.adressen; gruppe=1; land=‘D‘; If alter<30 Then typ=‘junior‘; Else typ=‘senior‘; Run; Der Wert der Variable typ wird in Abhängigkeit von einer Bedingung bestimmt (hier abhängig vom Alter). Hinweis Die Anweisungen im Datenschritt werden von oben nach unten für jede einzelne Beobachtung der SAS-Tabelle – ebenfalls sequentiell von oben nach unten – abgearbeitet. Vorsicht! Was passiert hier: Data sasuser.adneu; Set sasuser.adressen; If alter>=30 Then alter=2; If alter<30 Then alter=1; Run; C. Ortseifen 45 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Programm3 Data sasuser.adneu; Set sasuser.adneu; If typ=‘senior‘ Then Delete; Run; Welche SAS-Tabelle wird erzeugt? Wird sie aus Rohwerten oder einer SAS-Tabelle erzeugt? Wie heißt diese? Was macht die Anweisung Delete? Zuweisung von Konstanten C. Ortseifen Numerische Variablen Variable=Wert; x=3; y=0.2; z=.; Text- (Alphanumerische, Character-) Variablen Variable='Zeichenkette'; oder Variable="Zeichenkette"; status='ohne Befund'; sex="männlich"; wort=''; wort=' '; 46 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Arithmetische Operatoren Addition + Subtraktion - Multiplikation * Division / Potenzierung Es gilt dabei: Punkt- vor Strichrechnung. a=b+c; a=b-10; a=10+20; a=b-c; a=b-10; a=20-10; a=b*c; a=b*10; a=10*20; a=b/c; a=b/2; a=b**c; ** a=5/2; a=b**2; a=3**2; SAS-Funktionen Funktionsname(Argument<,Argument2<,..>>) Arithmetische Funktionen Sqrt(x) Exp(x) y=Sqrt(x); y=Sqrt(2); y=Exp(x); y=Exp(0); Quantilfunktionen, z.B. t-Verteilung Tinv(alf,df) C. Ortseifen x=Tinv(0.05,10); 47 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung SAS-Funktionen (2) Wahrscheinlichkeitsfunktionen, z.B. tVerteilung Probt(x,df,<nc>) p=Probt(1.96,10); Stichprobenfunktionen Mean(x,y) Std(x,y,z) y=Mean(a,b,c); y=Std(1,2,3); Funktionen Verwendung der Funktionen ausschließlich im Datenschritt (oder Prozedur SQL): Data work.irismein; Set urz.iris; sum1=sl+sw+pl+pw; * per Formel ; sum2=Sum(sl,sw,pl,pw); * mit Funktion; Run; C. Ortseifen 48 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Vorteil der Funktionen meistens schneller im Vergleich zur ‚Formel‘Methode, zum anderen können sie adäquat mit fehlenden Werten umgehen (vgl. Aufgabe 10). Vollständige Liste der verfügbaren Funktionen SAS Language Guide oder Hilfe > SAS Hilfe und Dokumentation > SAS Produkte > Base SAS > SAS Language Dictionary > Dictionary of Language Elements > Functions and CALL Routines Eine Übung für alle Data eins; a=1; b=2; c=3; Run; Data zwei; Set eins; a=4; Run; Data drei; a=1; a=2; a=3; Run; Data vier; Run; Fragen 1. Welche SAS-Tabellen werden erzeugt? 2. Wie viele Variablen haben diese? 3. Wie viele Beobachtungen? 4. Welche Werte? C. Ortseifen 49 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Rohwert-Typen Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger . 24 Liste/frei Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Hans Jutta Uwe Jens Müller Walldorf Schreiner Mannheim Schulz Pfluger St. Ilgen 25 31 19 24 Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Spalten (1-5) Format (:$10.) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Mehrere Zeilen pro Beobachtung (#1, /) Mehrere Beobachtungen pro Zeile (@@) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Jens Pfluger Heidelberg 24 INFILE + Liste/Format + MISSOVER Hans Jutta Uwe Jens Müller Schreiner Schulz Pfluger Walldorf Mannheim Nussloch Heidelberg Spalten + PAD Programm1.sas Data sasuser.adressen; Input name $ vorname $ ort $ alter; Datalines; Meier Hans Walldorf 25 Schulze Karin Mannheim 27 Müller Horst Nußloch 31 Run; C. Ortseifen 50 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Zum Programm1.sas Datenwerte stehen in einer Liste durch Leerzeichen getrennt. => Listengesteuert Die Anweisung Input definiert die vier Variablen: Name, Vorname usw.. Alphanumerische Variablen werden durch $ (nach dem Variablennamen) gekennzeichnet. Nach der Anweisung Datalines (inkl. ;) folgen die Datenwerte. Run; beendet den Datenschritt. Hinweise zur „Liste“ C. Ortseifen Zwischen zwei Datenwerten muss (mindestens) ein Leerzeichen stehen. Werte von Textvariablen (z.B. die Namen) dürfen nicht länger als 8 Zeichen sein und kein Leerzeichen enthalten. Fehlende Werte müssen durch einen Punkt gekennzeichnet werden. 51 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Anweisung Datalines (Cards) ist eine Anweisung des Datenschritts teilt dem SAS-System mit, dass im Anschluss die Datenwerte folgen ist die letzte Anweisung des Datenschritts Die Datenwerte werden durch ein Semikolon beendet, das in einer neuen Zeile stehen muss. Rohwert-Typen Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger . 24 Liste/frei Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Hans Jutta Uwe Jens Müller Walldorf Schreiner Mannheim Schulz Pfluger St. Ilgen Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Spalten (1-5) Format (:$10.) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Mehrere Zeilen pro Beobachtung (#1, /) Mehrere Beobachtungen pro Zeile (@@) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Jens Pfluger Heidelberg 24 INFILE + Liste/Format + MISSOVER C. Ortseifen 25 31 19 24 Hans Jutta Uwe Jens Müller Schreiner Schulz Pfluger Walldorf Mannheim Nussloch Heidelberg Spalten + PAD 52 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Spaltengesteuertes Einlesen ist angezeigt, wenn Textwerte Leerzeichen enthalten: Data sasuser.adressen; Input name $ 1-10 vorname $ 11-16 wohnort $ 17-26 alter 28-29; Datalines; Meier Hans St. Leon 25 van SchulzKarin Heidelberg 27 Karl Helmut 51 Run; Hinweise zu „Spalten“ C. Ortseifen Die Position der Variablen wird als Bereich von-bis angegeben. Keine Leerzeichen zwischen Werten notwendig Die Datenwerte müssen exakt in Spalten positioniert sein. Die Spalten müssen so breit angelegt sein, daß der längste Wert Platz hat. 53 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Rohwert-Typen Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger . 24 Liste/frei Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Hans Jutta Uwe Jens Müller Walldorf Schreiner Mannheim Schulz Pfluger St. Ilgen 25 31 19 24 Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Spalten (1-5) Format (:$10.) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Mehrere Zeilen pro Beobachtung (#1, /) Mehrere Beobachtungen pro Zeile (@@) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Jens Pfluger Heidelberg 24 INFILE + Liste/Format + MISSOVER Hans Jutta Uwe Jens Müller Schreiner Schulz Pfluger Walldorf Mannheim Nussloch Heidelberg Spalten + PAD Formatgesteuertes Einlesen ist angezeigt bei Textwerten länger als 8 Zeichen oder anderen Nicht-Standardwerten, wie Datumsangaben und Zahlen mit Kommas: Format Data sasuser.firma; Input name :$50. gebdatum Ddmmyy10. zahl1 Comma10.2 zahl2 Commax10.2; Datalines; Meier 01.01.1960 10,000.00 12,45 Leuthäuser-Schnarrenberger . 1.00 13,50 Karl 29.02.2000 1,000,000 100,50 Run; C. Ortseifen 54 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Einleseformate :$50. Textwerte bis zur Länge 50 $ Text 50 50 Zeichen . Kennzeichnet (Einlese-) Formate : bis zu … Zeichen (statt: genau …) Ddmmyy10. Datumsangabe der Form tag monat jahr, 10 Zeichen Comma10.2 Zahl mit Dezimalpunkt und Kommata zur Abtrennung von Tausenderstellen Werte in externen Dateien Anstelle der Anweisung Datalines verwendet man dann INFILE vor Input Data sasuser.klasse; Infile 'd:\klasse.dat'; Input name $ alter; Run; C. Ortseifen Direkt von einem Messgerät, mit einem externem Editor erfasst oder z.B. MSWord (Umwandlung in Ascii (als 'nur Text') nicht vergessen!) 55 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Rohwert-Typen Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger . 24 Hans Jutta Uwe Jens Liste/frei Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Müller Walldorf Schreiner Mannheim Schulz Pfluger St. Ilgen 25 31 19 24 Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Spalten (1-5) Format (:$10.) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Nussloch 19 Jens Pfluger Heidelberg 24 Mehrere Zeilen pro Beobachtung (#1, /) Mehrere Beobachtungen pro Zeile (@@) Hans Müller Walldorf 25 Jutta Schreiner Mannheim 31 Uwe Schulz Jens Pfluger Heidelberg 24 INFILE + Liste/Format + MISSOVER Hans Jutta Uwe Jens Müller Schreiner Schulz Pfluger Walldorf Mannheim Nussloch Heidelberg Spalten + PAD PAD und MISSOVER sind Optionen der Anweisung INFILE Infile 'd:\text.dat‘ Pad; Infile 'd:\text.dat‘ Missover; Allgemein Infile ‘Pfad\Datei‘ <Missover> <Pad>; C. Ortseifen Beispiele im SAS-Kurs S. 71 ff. 56 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Themen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 1. 2. 3. 4. 5. 6. 7. 8. Verknüpfen von SAS-Tabellen C. Ortseifen Ausgangszustand: Es existieren zwei SAS-Tabellen A und B. Ziel: Verknüpfung dieser beiden Tabellen zu einer Tabelle C. Denkbar sind dabei zwei Möglichkeiten: 1. Set 2. Merge 57 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Set und Merge sind zwei Anweisungen des Datenschritts. Data ...; Set ...; ...; Run; Data ...; Merge ...; ...; Run; Verknüpfen mit Set C. Ortseifen Zwei Dateien haben die gleiche Variablenstruktur, enthalten aber unterschiedliche Beobachtungen. Mit der Anweisung Set verbindet man sie zu einer neuen Datei, deren Variablenstruktur gleich bleibt, aber deren Beobachtungszahl sich aus der Addition der Beobachtungen der Ausgangsdateien ergibt. 58 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Beispiel für Set Data alt1; Input x y z; Datalines; 1 2 3 4 5 6 7 8 9 ; Data alt2; Input x y z; Datalines; 10 11 12 13 14 15 ; Data neu; Set alt1 alt2; Run; Verknüpfen mit Merge C. Ortseifen Zwei Dateien enthalten unterschiedliche Merkmale für gleiche Beobachtungen. Mit der Anweisung Merge verbindet man sie zu einer neuen Datei, deren Beobachtungszahl gleich bleibt, aber deren Variablenstruktur sich aus den Variablen der beiden Ausgangsdateien zusammensetzt. 59 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Beispiel für Merge Data alt1; Input x; Datalines; 10 11 12 ; Data alt2; Input y; Datalines; 100 200 300 ; Data neu; Merge alt1 alt2; Run; Mögliche Probleme Merge: In einer Datei fehlen Beobachtungen. Data alt1; Input x; Datalines; 10 11 12 ; C. Ortseifen Data alt2; Input y; Datalines; 100 300 ; 60 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Merge mit By Data alt1; Input id x; Datalines; 1 10 2 11 3 12 ; Data alt2; Input id y; Datalines; 1 100 3 300 ; Data neu; Merge alt1 alt2; By id; Run; Mögliche Probleme (2) Set: In einer Datei fehlen Variablen. Data alt1; Input x y z; Datalines; 1 2 3 4 5 6 7 8 9 ; Data neu; Set alt1 alt2; Run; C. Ortseifen Data alt2; Input x y; Datalines; 10 11 13 14 ; 61 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Mögliche Probleme (3) Variablen sind unterschiedlich benannt oder unter dem gleichen Variablennamen sind unterschiedliche Merkmale abgelegt: Î Anweisung Rename Î Dateioption Rename= Î Im SAS Explorer: RM View Columns und dann Doppelklick Mögliche Probleme (4) Variablen sind unterschiedlich kodiert (d.h. in einer Datei numerisch, in der anderen als Textvariable): Î Funktionen Input und Put zur Umwandlung von numerisch in Text oder umgekehrt C. Ortseifen 62 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Beispiel für Funktion Input Data alt1; Input num $ @@; Datalines; 1 2 3 4 5 6 ; Data alt1; Set alt1; n=Input(num,3.0); Drop num; Rename n=num; Run; Mögliche Probleme (5) Mindestens eine der Dateien ist sehr groß. Dann besser anstelle eines Datenschritts: Proc Datasets Eine Anleitung dazu finden Sie auf der Seite mit den Kursunterlagen. C. Ortseifen 63 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Wiederholung: Wie … … … … … … … … werden SAS-Tabellen neu angelegt? vorhandene geöffnet? berechnet man neue Variable aus alten? löscht man Variablen/Fälle? ändert man die Eigenschaften von Variablen? erzeugt man ein Word-Dokument mit SAS? ermittelt man Mittelwerte? … Themen 1. 2. 3. 4. 5. 6. 7. 8. C. Ortseifen Die Oberfläche von SAS Version 9 Die Libname-Anweisung Basisprozeduren Print, Sort Statistik am Beispiel von Means und Ttest Ausgaben nach RTF und HTML Der Datenschritt Tabellen verknüpfen Ein Makro 64 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Beispiele %Let datei=sashelp.class; %PrintTable(sashelp.class); %Macro PrintTable(datei); Proc Print Data=&datei; Run; %Mend; … %Do i=1 To &ende; %If &x > %Eval(2*&y) %Then … %Let y=&i; %End; … Call Symput("x", y); %If %Symexist(datei) %Then %Symdel(datei); %Let cmd=dir; dm '&cmd'; Warum eine Makro-Sprache? Vereinfachung des Codes Wiederverwendung Durch Kollegen Andere SAS Anwender (SAS community) Standardisierung C. Ortseifen Leichtere Pflege Bessere Lesbarkeit Definierte Analyseverfahren 65 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Was sind Makros? Automatisierte Programme Parametrisierung Modularisierung Konditionelle Ausführung von Programmteilen Fokus bei Entwicklung liegt auf Effizienz der Programmierung, nicht auf inhaltlicher Fragestellung Wie funktionieren Makros? Platzhalter-Prinzip In einem Programm werden Platzhalter referenziert Beim Verarbeiten werden Platzhalter ersetzt Grundprinzip ist die Textersetzung Æ Makros sind Code-Generatoren C. Ortseifen Ergebnis ist ein SAS-Programm (bzw. ein Teil davon) 66 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Die SAS Macro Facility besteht aus … Makrosprache (Macro Language) Programmiersprache in SAS/BASE Makroprozessor Makro-Variablen Makro-Anweisungen Makro-Funktionen Globale Optionen Interpreter Standards für die Bereitstellung Wie werden Makros entwickelt? C. Ortseifen SAS/BASE Programm schreiben Allgemein verwendbare Teile identifizieren (modularisieren) Variable Teile identifizieren Programm in ein Makro übersetzen Beispiel: Proc Print Data=sashelp.class; Run; 67 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Arbeiten mit SAS Submit SAS-Programm SAS-System Proc Print Data=sashelp.class; Run; Kompilierung + Ausführung Aufsuchen der Schlüsselworte und Verarbeiten der Anweisungen Ergebnis (Protokoll, Ausgabe, Datei) Arbeiten mit SAS-Makros Ausgeführt SAS-Programm Proc Print Data=sashelp.class; Run; Submit SAS-Makro Aufsuchen der Schlüsselworte und Verarbeiten der Anweisungen %PrintTable %Macro PrintTable; Proc Print Data=sashelp.class; Run; %Mend; C. Ortseifen SAS-System Ergebnis (Protokoll, Ausgabe, Datei) 68 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Wie SAS ein Makro verarbeitet Kompilierungsphase SAS verarbeitet Code Wenn Fehler auftritt Æ Fehlermeldung oder dummy macro Kompiliertes Makro in Work.Sasmacr gespeichert Aufruf des Makros SAS lädt Makro Makrovariablen werden aufgelöst Logik des Makros wird verarbeitet Resultierendes Programm wird von SAS verarbeitet Log, Output Ausführung Compiler 1. Makroprozessor &name %name Word Scanner 2. 3. Symbol Tabelle(n) Wenn & oder % aufgelöst. Input Stack %PrintTable(Sashelp.Class) 4. 5. 6. Kompiliertes Makro %Macro PrintTable(tabelle); Proc Print Data=&tabelle; Run; %Mend; C. Ortseifen 7. Word Scanner liest Token aus Input Stack Word Scanner erkennt Makroreferenzen [%,&] Kompiliertes Makro wird geöffnet Lokale Symbol-Tabelle wird angelegt Wert für Tabelle wird gespeichert Makroprozessor liest Tokens aus kompiliertem Makro und schreibt Ergebnis in Input Stack zurück Word Scanner liest Token aus Input Stack 69 URZ-Blockkurs WS 2008/2009 SAS - Einführung in Programmierung Makro-Anweisungen Makro-Definiton: %Macro, %Mend Aufruf: %macroname Kommentar: %* Tutorium zu Makros Im SAS-Anwenderhandbuch im Netz unter http://web.urz.uni-heidelberg.de/ und die Stichworte Programme > Statistik > SAS-Ah C. Ortseifen 70