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

Documents pareils