Der Data Step das unbekannte Wesen
Transcription
Der Data Step das unbekannte Wesen
Der Data Step – geheimnisumwoben und rästelhaft Der Data Step das unbekannte Wesen Publikumsbefragung Was kommt hierbei raus ? Grischa Pfister Data; Data x + y; Run; Run Info Ware GmbH Heidelberg [email protected] Der Data Step – geheimnisumwoben und rästelhaft Von Variablen und ihrer Entstehung (Klonen mit SAS) Bekannte Arten der Variablendefinition ➜ wert ➜ Data1 ... DataN ➜ Default Library wird über die Option user festgelegt die wird bei Beenden nicht gelöscht! Options user=lib; Von Variablen und ihrer Entstehung (Klonen mit SAS) Implizit Variablendeklaration ➜X ➜ ➜ Name ist „X“ bzw. „a“ Typ ist numerisch Länge ist 8 Nützlich um Iteratoren zu bilden Implizites Retain Auch für normale Addition verwendbar ➜X Length wert1 8 wert2 $10; Vorteil: deklariert die Reihenfolge in der die Variablen in der Tabelle angelegt werden Im Frühling summen die Data Steps Summenbildung und missing values + 1; bzw. a + b; Data; Set sashelp.class; If ( sex = "M" ) Then index + 1; Put index=; Run; ➜ = 5; Name ist „wert“ Typ ist numerisch Länge ist 8 ➜ Wert = "String"; Name ist „wert“ Typ ist character Länge ist 6 ➜ Length-Statement Data Steps werden automatisch benannt ➜ Einfach ➜ Mit der Summenformel ➜ Implizit ➜ 3 unterschiedliche Ergebnisse ;-) Summen_summen_summen.sas ➜ wertNeu = wert1 + wert2; wertNeu = sum(wert1,wert2); wertNeu + ( wert1 + wert2) + (-var) 1 Welches Schweinderl hätten‘s denn gern? Nicht Was – sondern Wo bin ich? Orientierungshilfen im Data Step Die automatische Variable _N_ ➜ ➜ Wird bei jeder Iteration um 1 erhöht Nicht in Tabelle enthalten Wie viele Obs hätten Sie gerne? ➜ Einsatzmöglichkeiten ➜ Sortiervariable erstellen Var = _n_; Z.B. Stichprobenziehung ➜ _N_ am Ende des Data Steps ➜ Dazu die end=var Option ➜ Nobs.sas Die elegantere Lösung ➜ Sonderbehandlung nach Durchlauf des Data Step ➜ End ➜ = var Option ➜ ➜ Anwendungsgebiete ➜ ➜ ➜ ➜ ➜ Aus dictionary.column HTML-Files erstellen Dokumentation von Variablen By_n_und_end.sas Voraussetzung ist Sortierung Automatische Variablen First. First.ByVar ByVar Last.ByVar Last.ByVar ➜ _N_ + BY + END Dictionary.tables Nobs.sas By Processing im Data Step ➜ Nobs.sas Was tun, wenn sich Gruppen bilden? Z.B. um zusätzliche Informationen im LOG auszugeben Im Rudel kaum auszuhalten = var Option + Auch nett ➜ Am Ende – oder: Was vom Data Step übrig blieb Die nobs ➜ Stop; Statement Konditioneller Code nach jeder n-ten Iteration If ( mod(_n_,3) mod(_n_,3) = 0 ) Then ...; Wird oft in Makros benötigt Der steinige Weg ➜ Damit kann nach Sortieren die Ausgangssituation wiederhergestellt werden ➜ Feststellen der Anzahl Observations Data Step Reporting Ausgabe in externe Files (z.B. HTML erzeugen) Zwischensummen in gleicher Tabelle erzeugen by_processing01.sas 1 2 3 Data Step Verarbeiten mehrerer Tabellen ➜ ➜ Bekannt ist Merge-Statement Eine Tabelle aus mehreren Tabellen Data a; Merge b c; By var; Run; ➜ ➜ Umgekehrter Weg? Mehrere Tabelle aus einer Data a b; Set c; If ( bedingung) then Output a; Else Output b; Run; ➜ Data 123.sas 2 Schreiben, schreiben, schreiben „Neues“ vom Filename-Statement ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ Damit sind alle Optionen von Infile auch für Cards-Blöcke anwendbar File „“ delimiter=„“ dsd; Festlegung des Standard-Trennzeichen z.B. „09“x (=Tabulator) Spezielles Layout für Werte die delimiter enthalten ➜ Infile_und_cards.sas ➜ Nicht über Data Step Logik (If, where) Sondern über ihre Observation-Number ➜ Sind kombinierbar ➜ Infile Cards optionen; Arrays Fassen mehrere Werte oder Variablen zusammen Syntax: ➜ Array name {n|*} <Typ <Länge>>; Die Point=var Option ➜ Array name {n|*} <Typ <Länge>> var1 var2 ... varN; ➜ Set_und_point.sas ➜ Array name {n|*} <Typ <Länge>> (wert1 ... wertN); ➜ Kann auch verwendet werden um z.B. einen Teil einer Tabelle zu duplizieren und an einer bestimmten Stelle einzufügen!! ➜ Werte und Variablen müssen den gleichen Typ haben!!! ➜ Sinnvoll immer dann, wenn gleiche Operationen sehr oft wiederholt werden If ( variable = wert ) Then ...; Arrays Infile- und Cards-Statement ➜ Bestimmte Observations auslesen ➜ File Print; Ausgabe ins Output-Fenster Debugging von Data Step Reporting ODS nutzen Und wenn ich gar nicht alle will? Karten lesen Eigene Funktionen im Data Step Beispiele ➜ ➜ ➜ ➜ ➜ Einlesen von Variablen array00.sas Viele Variablen um einen oder mehrere Faktoren erhöhen array00a.sas Testdaten erzeugen array01.sas Werte ersetzen array02.sas Neue Variablen bilden array03.sas Möglich mit Hilfe der Macro Language ➜ Makros können Werte zurückgeben ➜ %Macro t (mvar); %If mvar = wert %Then %Let return = wert2; %Else %Let return = wert2; &return; %Mend; Data _null_; a = "hallo"; b = %t(wert); Put a= b=; Run; 3 Wenn es mal nicht so ganz genau sein soll... Der Vergleichsoperator =: ➜ Var ➜ ➜ =: "string" Vergleicht Zeichenketten Überprüft die Gleichheit der rechts angegebenen Zeichen Data _null_; Set sashelp.class; If ( name =: "A" ) Then Put name =; Run; 4