URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Kursaufbau Mittwoch, 13.02. – Freitag, 15.02.2013 Das Datenanalysesystem SAS 9:15 –maximal 12:30 Uhr im Raum 118 Einführung in die Programmierung 3 x 4 Std., Blockkurs, Februar 2013 Dr. Carina Ortseifen, URZ Heidelberg Literatur Folien und Aufgaben URZ-Homepage > Programme > Statistik > SAS > Kursunterlagen zu SAS SAS-Kursen Kursen. Vorkenntnisse, Erwartungen SAS Online-Hilfe (Menü Help) SAS Online-Doku im WWW http://support.sas.com/documentation/ onlinedoc/index.html n Welche Vorkenntnisse bringen Sie mit hinsichtlich SAS? o Was wollen Sie in dem Kurs erfahren, lernen? o Warum SAS und nicht SPSS oder Stata? - Base SAS mit Language Reference und Procedures Guide - SAS/STAT C. Ortseifen 1 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Themen Voraussetzungen 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. Begriffe C. Ortseifen SAS-Tabelle, SAS-Datei im Unterschied zu SAS-Programm Variable, Beobachtung, g Wert einer Tabelle Variablentyp, Label (Etikett) Format, Informat Anwendungsroutinen/Task Daten- und Prozedurschritte SAS-Server / SAS-Bibliothek (Library) 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 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 2 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung SAS Version 9 Installiert ist: SAS 9.2 (TS2M3) Englisch und Deutsch Programmierumgebung (Code-Fenster) mit Windows Elementen: Windows-Elementen: Menüleiste Icons Editor-, Log- und Outputfenster Explorer und Resultfenster Arbeitsweise 1. 2. 3. C. Ortseifen SAS-Programm in den Editor laden oder neu schreiben Programm g ausführen über Menü (Run > Submit), Icon , oder Funktionstaste F3, RM Submit All oder Kommando Submit Ergebnisse betrachten (Log-Fenster, Output-Fenster) Menüleiste SASExplorer Kommando -zeile Symbolleiste (Tools) Protokollfenster (Log) Editorfenster (Code) Ausgabefenster (Output) Beispielprogramm beispiel.sas Im Ordner O:\KURS\SAS\SAS Kurs Programmierung 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; 3 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Aufbau von SAS-Programmen Globale Anweisungen SAS-Anweisungen Ods RTF ... Title Datenschritte Prozedurschritte Data ... ; Run; Proc Freq .... ; Proc Print ... Proc Freq ... Run; C. Ortseifen Optionen wählen Aktionen aus oder ändern Voreinstellungen ab. Proc Print Data=sasuser.adressen; 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. Daten- und Prozedurschritte bestehen aus Anweisungen. Anweisungen werden durch ein Schlüsselwort eingeleitet (z.B. Data, Proc, Run, Title) und enden mit einem Semikolon (;). 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 4 URZ-Kurs Februar 2013 SAS-Bibliotheken sind (Unter-) Ordner, die SAS-Tabellen und SAS-Kataloge enthalten. Um nicht immer den g 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. Bibliotheken Work Sasuser Sashelp Maps Local (SAS/Enterprise Guide) C. Ortseifen temporärer Arbeitsbereich Arbeitsbereich des Anwenders SAS-Arbeitsbereich SAS Arbeitsbereich Bibliothek mit Landkartendaten SAS - Einführung in Programmierung Bibliotheken verwalten (Libname) ü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. Zurück zum Beispielprogramm … Proc Print Data=sashelp.class; Run; … Tabelle CLASS in der Bibliothek SASHELP Alternative Schreibweise: Proc Print Data="C:\Programme\SAS\SASFoundation\ 9.2\core\sashelp\class.sas7bdat"; Run; 5 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Eigene Bibliotheken definieren Anweisung Libname. Beispiel: Libname urz 'O:\Kurs\sas\daten'; Schlüsselwort Libname Bibliotheksname Zugriff auf Excel-Tabellen Libname schule Excel 'O:\Kurs\sas\SAS Kurs Programmierung\schule xls'; Programmierung\schule.xls'; Pfadangabe Allgemeine Syntax: Libname bib <engine> 'Pfad'; Besonderheiten: Als Pfad steht eine komplette Datei. Für jedes Arbeitsblatt und für jeden Namensbereich wird eine SAS-Tabelle angelegt. Optionale Option: Engine (Dateiform), z.B. V6, SPSS, Excel 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 Tabelleninformationen Tabelle anklicken, RM > Properties liefert: Allgemeine g Optionen Details Indizes Spalten (= Variablenfenster) Eintragungen, die sich ändern lassen, haben Popup-Menü. 6 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Variablenfenster Tabellenansicht und zurück (auch über RM > View columns) Anzeige g der Variablen samt Eigenschaften g Name, Etikett, Ausgabe- und Einleseformat können über das RM-Menü Modify geändert werden (Nicht: Variablentyp und Länge!) 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 C. Ortseifen 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 ). Prozedur Print Darstellen der Datenwerte einer SAS-Tabelle im Ausgabefenster D einfachste Der i f h t A Aufruf f f Proc Print Data=sashelp.class; Run; gibt die SAS-Tabelle sashelp.class vollständig mit allen Variablen und Beobachtungen aus. 7 URZ-Kurs Februar 2013 Einschränkungen / Änderungen Nur bestimmte Variablen Î Anweisung Var Nur bestimmte Beobachtungen g / Teilmenge g Î Dateioptionen Obs= und Firstobs= Î Anweisung Where Beobachtungen in einer anderen Reihenfolge Î Prozedur Sort Listen getrennt nach bestimmten Gruppen Î Anweisung By Variablenbereiche Benennung einzelner Variablen: SAS - Einführung in Programmierung Anweisung Var Proc Print Data=sashelp.class; Var name age; Run; Variablen ausschließen - Drop= Var name age; mit geänderter Reihenfolge: Var weight i h age name; Var name--height; Gleicher Präfix und numerische Endung: Gleicher Präfix: Var tag1-tag5; Var tag: ; C. Ortseifen Sollen alle Variablen bis auf wenige dargestellt werden, verwendet man die Dateioption Drop=: Proc Print Data=sashelp.class(Drop=name); Run; Variablenbereiche innerhalb der Datei: Sollen nicht alle Variablen ausgegeben oder die Variablen in anderer Reihenfolge dargestellt werden, verwendet man die Anweisung Var. Die Dateioptionen folgen dem Tabellennamen in Klammern: (Drop=Variable|Variablenliste) 8 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Teilmengen Where-Anweisung Normalerweise werden Prozedurschritte für alle Beobachtungen ausgeführt. Bei g 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 Dateioptionen Obs= und Firstobs= Anweisung Where! Logische Bedingungen Numerische Variablen Textvariablen Wh Where stadt=‘Heidelberg‘; d ‘H id lb ‘ Vergleichsoperatoren = eq gleich > gt größer >= ge größer oder gleich in in der Liste enthalten C. Ortseifen Proc Print Data=sashelp.class; Where age>13; Run; Where ist eine lokale Anweisung, die für fast jede Prozedur verwendet werden kann. Kombinierte Bedingungen Where wert=1; Where wert>1; Beschränkung auf Untergruppen durch Formulierung einer logischen Bedingung, die von den Beobachtungen erfüllt werden muss. ^= ne ungleich < lt kleiner <= le kleiner oder gleich 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; 9 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Firstobs=, Obs= Weitere Operatoren Between-And Contains In Where x between 1 and 5; Where a contains 'Dr.'; Where a in(1,2,3); Is null|Is missing Like Weitere Hinweise und zahlreiche Beispiele im SAS-Wiki http://de.saswiki.org unter den Stichworten Where und If Andere Reihenfolge der Fälle 1. 2. C. Ortseifen Um die Beobachtungen (=Zeilen) der SASTabelle in einer anderen Reihenfolge darzustellen, muss die Tabelle zunächst mit d Prozedur der d Sort sortiert werden. d Anschließend kann die sortierte Tabelle mit der Prozedur Print im Ausgabefenster angezeigt werden. Proc Sort ... ; Run; Proc Print ...; Run; Die Dateioptionen folgen in Klammern dem Tabellennamen: Proc Print Data=sashelp class(Firstobs=4 Obs=10); Data=sashelp.class(Firstobs=4 Run; Firstobs= Nummer der ersten Beobachtung, die verarbeitet wird Obs= Nummer der letzten Beobachtung, die verarbeitet wird Firstobs <= Obs Prozedur Sort Sortieren erfolgt nach bestimmten Kriterien, die mit der BY-Anweisung formuliert werden. Proc Sort Data=meine.class; By age; Run; sortiert die Beobachtungen nach Alter (in aufsteigender Reihenfolge) Prozedur erzeugt keine Ausgabe. 10 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Mehrfache Sortierkriterien Beispiel: Telefonbuch Innerhalb einer By-Gruppe wird weiter nach dem nächsten Kriterium sortiert: Proc Sort Data=meine.class; By sex name age; Run; Die Reihenfolge der Variablen entscheidet über die Anordnung der Beobachtungen. 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. definiert Voraussetzung: SAS-Tabelle ist nach der oder den BY-Variablen sortiert. Proc Print Data=sashelp.class; Var name age; By sex; Run; 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. ein Proc Sort Data=meine.class Out=meine.class2; By name; Run; 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=meine.class; By sport; Proc Print Data=meine.class; ... 11 URZ-Kurs Februar 2013 Beschriftungen 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. Hinweise Es können bis zu 10 Titel- und Fußzeilen definiert werden. SAS - Einführung in Programmierung Beispiele Title1 ’Experiment von Fisher’; Title2 ’Vergleich von 3 Irisarten'; Footnote ’Umfang: je 50 Blüten’; Proc Print Data=meine.iris; Run; Globale Einstellungen - Optionen Beim Start der SAS-Sitzung belegt das SASSystem viele Schalter vor durch Als globale Anweisungen gelten sie so lange, bis sie geändert oder zurückgesetzt werden. Zurücksetzung: Title ; Footnote ; C. Ortseifen 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) 12 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Einige globale Einstellungen Ausgabe des Datums Date Nodate A Anzeige i der d Seitennummern S it Number N b Nonumber Verändern der Seitennummer SAS System Options C. Ortseifen Kommando Option Menü Tools > Options > System … Pageno=n Ä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. 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 ...; 13 URZ-Kurs Februar 2013 Literatur SAS - Einführung in Programmierung Aufgabe Prozeduren Print und Sort sind Bestandteil von SAS Base: Erzeugen Sie eine Liste (Listenbericht) der SAS Procedures d Guide d SAS-Tabelle b ll dateia d aus dem Ordner O:\kurs\sas\daten Globale Anweisungen und Dateioptionen SAS Language Reference 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 C. Ortseifen Prozedur Means 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 ... 14 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Einfachster Aufruf Anweisung Var Proc Means Data=sashelp.iris; Run; berechnet für alle numerischen Variablen 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 Class Berechnung der Kennwerte getrennt für die durch die Class-Variablen definierten Gruppen Proc Means Data=sashelp.iris; Var sepallength; Class species; Run; C. Ortseifen Tabelle braucht nicht sortiert (nach species) vorliegen. beschränkt die Liste der Variablen, für die Kennwerte berechnet werden. Proc Means Data=sashelp.iris; Var sepalwidth petalwidth; Run; Alternative Lösung: Proc Means Data=sashelp.iris(Drop=sepallength); Run; Anweisung Output Übertragung der Kennwerte in eine neue SAS-Tabelle Proc Means Data=sashelp.iris; Data=sashelp iris; Var sepallength; Output Out=work.iris; Run; Die Kennwerte werden im Ausgabefenster angezeigt, gleichzeitig wird die SAS-Tabelle iris angelegt. 15 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Mit Output erzeugte Tabelle Option Noprint iris hat - 5 Beobachtungen für die fünf Kennwerte (N, Mean, Std, Min, Max) und - 4 Variablen _Type_, _Freq_, _Stat_ und die eigentliche Variable sepallength, die die Kennwerte enthält. Prozedur Ttest Proc Means Data=sashelp.iris Data=sashelp iris Noprint; Var sepallength; Output Out=work.iris; Run; Das Ergebnis ist die neue SAS-Tabelle iris. Einfachster Aufruf Vergleich von zwei Gruppen hinsichtlich deren C. Ortseifen Die Option Noprint unterdrückt die Darstellung der Kennwerte im Ausgabefenster. Erwartungswerte t-Test für gleiche und ungleiche Varianzen für unabhängige u. abhängige Gruppen Varianzen F-Test Proc Ttest Data=sashelp.class; Class sex; Var weight; Run; 16 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung The TTEST Procedure Variable: Sex F M Diff (1-2) Sex Kennwerte Weight N Mean Std Dev Std Err Minimum Maximum 9 10 90.1111 109.0 -18.8389 19.3839 22.7272 21.2196 6.4613 7.1870 9.7497 50.5000 83.0000 112.5 150.0 Method Mean 95% CL Mean F 90.1111 M 109.0 Diff (1-2) (1 2) Pooled -18 18.8389 8389 Diff (1-2) Satterthwaite -18.8389 Method Variances Pooled Satterthwaite Equal Unequal 75.2113 92.6920 -39 39.4090 4090 -39.2325 Std Dev 105.0 125.2 1 1.7313 7313 1.5547 19.3839 22.7272 21 21.2196 2196 DF t Value Pr > |t| 17 16.962 -1.93 -1.95 0.0702 0.0680 Equality of Variances Method Num DF Den DF F Value Pr > F 9 8 1.37 0.6645 Folded F Mehr zur Proc Ttest … in der Online-Hilfe: 95% CL Std Dev 13.0930 15.6326 15 15.9229 9229 Help > SAS Help l and d Documentation > SAS Products > SAS/STAT > SAS/STAT 9.22 User's Guide > The TTEST Procedure > Examples: TTEST Procedure 37.1351 41.4910 31 31.8112 8112 t-Test mit Freiheitsgrad, Teststatistik, Irrtumswahrscheinlic hkeit (=Ws. unter Nullhypothese) F-Test 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;> C. Ortseifen 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 17 URZ-Kurs Februar 2013 Ausgabe von Prozeduren Standardmäßig: Ausgabefenster Aber: Für Publikationen benötigt g man eher Ausgaben im Format Word, PDF oder HTML. Da bedient man sich dem ODS ODS = Output Delivery System SAS - Einführung in Programmierung 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; ODS HTML Für Publikationen im Internet/Intranet: HTML-Ausgaben ODS Html File="liste.html"; Proc Print Data=urz.iris; Run; Standardausgabe: Listing ODS Listing; Proc Print Data=urz.iris; Run; Ods Listing Close; Ods Html Close; C. Ortseifen 18 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung ODS GRAPHICS ON/OFF Für HTM, RTF und Listing werden zusätzliche Grafiken erzeugt. Beispiel: Prozedur TTEST Je nach Situation werden erzeugt: Boxplots, Histogramme, Profile, QQ-Plots … (Details siehe Online-Hilfe .. >Syntax > PROC TTEST Statement) 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 SAS-Tabellen erzeugen SAS-Tabellen erzeugen mit SAS/Enterprise Guide: mit SAS 9.2: Datei > Öffnen für SAS-Tabellen SAS-Tabellen, Excel-Arbeitsblätter … oder: Datei > Daten importieren für Textdateien, Excel-Arbeitsblätter … Datenschritt mit Anweisung Set für SAS-Tabellen, Excel-Arbeitsblätter … Datenschritt mit Anweisung Infile für Textdateien (Rohwerte) Prozeduren SQL und Import für SAS-Tabellen, Datenbankentabellen und Fremdformate mit Libname-Anweisung f. permanente Tabellen C. Ortseifen 19 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Programm1.sas Programm2.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; Data sasuser.adneu; Set sasuser.adressen; gruppe=1; land=‘D‘; ; If alter<30 Then typ=‘junior‘; Else typ=‘senior‘; Run; Was macht dieses Programm, wenn man es ausführt? Was ist die Aufgabe des Datenschritts? Was tun die einzelnen Anweisungen? Was macht dieses Programm? Was ist die Aufgabe des Datenschritts? Was tun die einzelnen Anweisungen? Aufgabe des Datenschritts Die Anweisung Data … ist die Erzeugung von SAS-Tabellen 1. Entweder aus Rohwerten/ASCII-Dateien: Input + Datalines l + Datenwerte Input + Cards + Datenwerte Infile + Input (Datalines und Cards sind synonyme Anweisungen.) oder 2. C. Ortseifen aus vorhandenen SAS-Tabellen: Set ist die erste Anweisung im Datenschritt. Dem Schlüsselwort Data folgt g der Name der zukünftigen SAS-Tabelle. Data sasuser.adressen; Data sasuser.adneu; Data work.firma; 20 URZ-Kurs Februar 2013 Ende des Datenschritts Der Datenschritt ist beendet, wenn ein neuer Daten- oder Prozedurschritt beginnt d.h. Data- oder Proc-Anweisung, g eine Run-Anweisung auftritt oder nach den Datenzeilen nach einer Datalinesoder Cards-Anweisung SAS - Einführung in Programmierung 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 Anweisung Set bezeichnet die SAS-Tabelle, die in die neue kopiert wird. Diese Tabelle muss existieren. Die Tabelle b ll in der d Data-Anweisung kann k mit der in der Set-Anweisung übereinstimmen: Data sasuser.adneu; Set sasuser.adneu; aklasse=alter/10; Run; C. Ortseifen Programm2 - Die Zuweisung Data sasuser.adneu; Set sasuser.adressen; g pp 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. 21 URZ-Kurs Februar 2013 Programm2 - Bedingte Zuweisung Data sasuser.adneu; Set sasuser.adressen; g pp gruppe=1; ; land=‘D‘; If alter<30 Then typ=‘junior‘; Else typ=‘senior‘; Run; SAS - Einführung in Programmierung Hinweis Die Anweisungen im Datenschritt werden von oben nach unten für jede einzelne Beobachtung der SAS-Tabelle – ebenfalls sequentiell von oben b nach h unten – abgearbeitet. b b Der Wert der Variable typ wird in Abhängigkeit von einer Bedingung bestimmt (hier abhängig vom Alter). Programm3 Data sasuser.adneu; Set sasuser.adneu; If typ typ=‘senior‘ 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? C. Ortseifen Zuweisung von Konstanten Numerische Variablen Variable=Wert; x=3; y=0 2; y=0.2; z= z=.; ; Text- (Alphanumerische, Character-) Variablen Variable='Zeichenkette'; oder Variable="Zeichenkette"; status='ohne Befund'; sex="männlich"; wort=''; wort=' '; 22 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Arithmetische Operatoren Addition + Subtraktion - Multiplikation * Division / Potenzierung a=b+c; a=b-10; a=10+20; a=b-c; a=b-10; a=20-10; a=b/c; a=b/2; a=b**c; ** Wahrscheinlichkeitsfunktionen, z.B. tVerteilung p=Probt(1.96,10); P bt(1 96 10) Stichprobenfunktionen y=Mean(a,b,c); y=Std(1,2,3); Arithmetische Funktionen Sqrt(x): y=Sqrt(x); y=Sqrt(2); Exp(x): y=Exp(x); y=Exp(0); Es gilt dabei: Punkt- vor Strichrechnung. Mean(x,y): Std(x,y,z): C. Ortseifen a=5/2; a=b**2; a=3**2; P bt( df Probt(x,df,<nc>): ) Funktionsname(Argument<,Argument2<,..>>) a=b*c; a=b*10; a=10*20; SAS-Funktionen (2) SAS-Funktionen Quantilfunktionen, z.B. t-Verteilung Tinv(alf,df): x=Tinv(0.05,10); Funktionen Verwendung der Funktionen ausschließlich im Datenschritt (oder mit Prozedur SQL): Data work.irismein; ork irismein Set urz.iris; sum1=sl+sw+pl+pw; * per Formel ; sum2=Sum(sl,sw,pl,pw); * mit Funktion; Run; 23 URZ-Kurs Februar 2013 Vorteil der Funktionen meistens schneller im Vergleich zur ‚Formel‘Methode, zum anderen können sie adäquat mit fehlenden Werten umgehen (vgl Aufgabe 22) (vgl. 22). Vollständige Liste der verfügbaren Funktionen SAS Language Guide oder Help > SAS Hielp and Documentation > SAS Products > Base SAS > SAS Language Dictionary > Dictionary of Language Elements > Functions and CALL Routines SAS - Einführung in Programmierung 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? Struktur der Daten Programm1.sas … bestimmt den Datenschritt: 1. Daten in Form einer Liste Daten in Spaltenform Nichtstandard-Formate 2. Eine Zeile pro Beobachtung mehrere Zeilen pro Beobachtung mehrere Beobachtungen pro Zeile 3. Datenwerte im Datenschritt Datenwerte in externer Datei 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 Daten als Liste: Freies oder listengesteuertes Einlesen 24 URZ-Kurs Februar 2013 Zum Programm1.sas Datenwerte stehen in einer Liste durch Leerzeichen getrennt. Die Anweisung g 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. 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. SAS - Einführung in Programmierung Hinweise zur „Liste“ 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. Programm2.sas 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; Daten in Spalten bzw. Textwerte mit Leerzeichen: Spaltengesteuertes Einlesen C. Ortseifen 25 URZ-Kurs Februar 2013 Hinweise zu „Spalten“ 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. Programm3.sas SAS - Einführung in Programmierung Nicht-Standard-Werte Texte mit mehr als 8 Zeichen Datumsangaben Zahlenwerte mit Komma als Dezimaltrennzeichen Einleseformate Data sasuser.test; Informat name $50. zahl Commax10.2; Input name zahl; Datalines; Einleseformat Meier 12,45 Leuthäuser-Schnarrenberger 13,50 Karl 100,50 Run; $50. Textwerte der Länge 50 $ Text 50 50 Zeichen . Kennzeichnet (Einlese-) Formate Nicht-Standard-Werte: Formatgesteuertes Einlesen Commax10.2 Zahl mit Dezimalpunkt und Kommata zur Abtrennung von Tausenderstellen C. Ortseifen Ddmmyy10. Datumsangabe der Form tag monat jahr, 10 Zeichen 26 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Themen Werte in externen Dateien Anstelle der Anweisung Datalines verwendet man dann INFILE vor Input Data sasuser.klasse; Infile 'o:\kurs\sas\daten\klasse o:\kurs\sas\daten\klasse.dat dat' firstobs=2; Input name $ alter; Run; Direkt von einem Messgerät, mit einem externem Editor erfasst oder z.B. MSWord (Umwandlung in Ascii (als 'nur Text') nicht vergessen!) 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 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 Set und Merge sind zwei Anweisungen des Datenschritts. Data ...; ; Set ...; ...; Run; Data ...; ; Merge ...; By...; Run; 27 URZ-Kurs Februar 2013 Verknüpfen mit Set 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. Verknüpfen mit Merge C. Ortseifen Zwei Dateien enthalten unterschiedliche Merkmale für gleiche Beobachtungen. Mit der Anweisung g Merge g verbindet man sie zu einer neuen Datei, deren Beobachtungszahl gleich bleibt, aber deren Variablenstruktur sich aus den Variablen der beiden Ausgangsdateien zusammensetzt. SAS - Einführung in Programmierung Beispiel für Set Data dat1; Input x y z; Datalines; 1 2 3 4 5 6 7 8 9 ; Data dat2; Input x y z; Datalines; 10 11 12 13 14 15 ; Data datneu; Set dat1 dat2; Run; Beispiel für Merge Data dat3; Input n x; Datalines; 1 10 2 11 3 12 ; Data datneu2; Merge dat3 dat4; By n; Run; Data dat4; Input n y; Datalines; 1 100 2 200 3 300 ; 28 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Mögliche Probleme (Set) Mögliche Probleme In einer Datei fehlen Variablen. Variablen sind unterschiedlich benannt Data dat5; Input x y z; D t li Datalines; 1 2 3 4 5 6 7 8 9 ; Data datneu3; Set dat5 dat6; Run; Data dat6; Input x y; D Datalines; t li 10 11 13 14 ; Mögliche Probleme (2) Variablen sind unterschiedlich kodiert (d.h. in einer Datei numerisch, in der anderen als l Textvariable): bl ) Î Funktionen Input und Put zur Umwandlung von numerisch in Text oder umgekehrt C. Ortseifen oder unter dem gleichen Variablennamen sind unterschiedliche Merkmale abgelegt: Î Anweisung Rename oder Î Dateioption Rename= Beispiel für Funktion Input Data dat7; Input num $ @@; Datalines; 1 2 3 4 5 6 ; Data dat8; Set dat7; n=Input(num,3.0); Drop num; Rename n=num; Run; 29 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Mögliche Probleme (3) Themen Mindestens eine der Dateien ist sehr groß. Dann besser anstelle eines Datenschritts: 1. 2. 3. Proc Datasets 4. 5. Eine Anleitung dazu finden Sie auf der Seite mit den Kursunterlagen. 6. 7. 8. Beispiele %Let datei=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; … 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 Warum eine Makro-Sprache? %PrintTable(sashelp.class); Vereinfachung des Codes Call Symput("x", y); %Let cmd=dir; dm '&cmd'; Wiederverwendung %If %Symexist(datei) %Then %Symdel(datei); Leichtere Pflege Bessere Lesbarkeit Durch Kollegen Andere SAS Anwender (SAS community) Standardisierung Definierte Analyseverfahren 30 URZ-Kurs Februar 2013 Was sind Makros? Automatisierte Programme SAS - Einführung in Programmierung Wie funktionieren Makros? Parametrisierung Modularisierung Konditionelle Ausführung von Programmteilen Fokus bei Entwicklung liegt auf Effizienz der Programmierung, nicht auf inhaltlicher Fragestellung Die SAS Macro Facility besteht aus … Programmiersprache in SAS/BASE Ergebnis ist ein SAS-Programm (bzw. ein Teil davon) Wie werden Makros entwickelt? Makro-Variablen M k A Makro-Anweisungen i Makro-Funktionen Globale Optionen SAS/BASE Programm schreiben Allgemein verwendbare Teile identifizieren (modularisieren) Variable Teile identifizieren Programm in ein Makro übersetzen Makroprozessor C. Ortseifen Grundprinzip ist die Textersetzung Æ Makros sind Code-Generatoren In einem Programm werden Platzhalter referenziert Beim Verarbeiten werden Platzhalter ersetzt Makrosprache (Macro Language) Platzhalter-Prinzip Interpreter Standards für die Bereitstellung Beispiel: Proc Print Data=sashelp.class; Run; 31 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Arbeiten mit SAS Makro %PrintTable Submit SAS-Programm SAS-System Proc Print Data=sashelp.class; Run; Kompilierung + Ausführung %Macro PrintTable; Proc Print Data Data=sashelp.class; sashelp class Run; %Mend; Aufsuchen der Schlüsselworte und Verarbeiten der Anweisungen Ergebnis (Protokoll, Ausgabe, Datei) Arbeiten mit SAS-Makros Proc Print Data=sashelp.class; Run; Submit SASMakro %Macro PrintTable; Proc Print Data=sashelp.class; Run; %Mend; C. Ortseifen Aufsuchen der Schlüsselworte und Verarbeiten der Anweisungen Ergebnis (Protokoll, Ausgabe, Datei) Kompilierungsphase SAS-System %PrintTable Aufruf: %PrintTable Wie SAS ein Makro verarbeitet Ausgeführt SAS-Programm Definition: 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 32 URZ-Kurs Februar 2013 Log, Output Ausführung Compiler SAS - Einführung in Programmierung 1. Makroprozessor &name %name Word Scanner 2. 3. Symbol Tabelle(n) Wenn & oder % aufgelöst. f lö t Input Stack %PrintTable(Sashelp.Class) 4. 5. 6. Kompiliertes Makro %Macro PrintTable(tabelle); Proc Print Data=&tabelle; Run; %Mend; 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 Makro-Anweisungen Makro-Definiton: %Macro, %Mend Aufruf: %macroname Kommentar: %* Tutorium zu Makros E-Learning Kurse von SAS Im deutschsprachigen SAS-Wiki unter http://de.saswiki.org/wiki/Hauptseite Englischsprachige Online- Kurse zu den Themen und die Suche nach Makro- Tutorium C. Ortseifen SAS SAS SAS SAS SAS Enterprise Guide Macro Language Programming SQL Statistics 33 URZ-Kurs Februar 2013 SAS - Einführung in Programmierung Zur Grafik Philip Holland: Why should you be using the new SG procedures in SAS 9.2? http://support.sas.com/resources/papers/proceedings 11/427-2011.pdf / df Robert Allison: Gplot and SGPlot http://robslink.com/SAS/papers/sg_procs/sgplot.html Robert Allison: Gchart and SGPlot bar charts http://robslink.com/SAS/papers/sg_procs/sgplot_bar. html C. Ortseifen 34