Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Community Manager
Beiträge: 291
SAS Tipp #2: Initialisieren von Variablen in Datasets

Hallo Redscope-User,

hier der zweite Tipp unserer unregelmäßigen Tipp-Reihe.

PROBLEM:
Manchmal legt man in einem Dataset gewollt leere Variablen an, belegt sie aber nicht direkt mit initialen Werten, z.B. um ein Dataset-Template zu erhalten, an das man Daten per Append hängen kann. Im Log erhält man dann eine "uninitialized"-Meldung. Das erschwert das Finden von ungewollten "uninitialized"-Meldungen, die häufig auf Tippfehler in Variablennamen hinweisen können.

Mittels einer array-Bildung der betreffenden Variablen kann man diese Meldung unterdrücken.

Mit den folgenden vier Zeilen Code werden alle Variablen jeden Typs in einem neuen Dataset leer initialisiert, so dass keine "uninitialized"-Meldung mehr erscheint. Dem Dataset werden dafür temporär(!) zwei zusätzliche Variablen _VARDUMMYN/C zugefügt, numerische und alphanumerisch, um jedem Array mindestens ein Element zuordnen zu können. Dies ist dann von Vorteil, wenn man die vier Zeilen in ein Makro packt und in unterschiedlich zusammengesetzten Datasets verwendet, die nicht zwingend beide Variablentypen beinhalten.

Natürlich könnte man, sofern man nur einen Variablentyp verwendet, hier den Code auch auf die eine entsprechende array-Zeile kürzen.

Natürlich könnte man, sofern man nur einen Variablentyp verwendet, hier den Code auch auf die eine entsprechende array-Zeile kürzen.

retain _VARDUMMYN . _VARDUMMYC ' '; %* temp-Variablen erzeugen... ;
drop _VARDUMMYN _VARDUMMYC;         %* ... aber auch wieder löschen;
array CHARACTERVARS _CHARACTER_;    %* alphanumerisches Array;
array NUMERICVARS _NUMERIC_;        %* numerisches Array;

BEISPIEL mit Meldungen:

1    data dummy;
2      length a 5 b c $10;
3      stop;
4    run;
NOTE: Variable a is uninitialized.
NOTE: Variable b is uninitialized.
NOTE: Variable c is uninitialized.
NOTE: The data set WORK.DUMMY has 0 observations and 3 variables.

BEISPIEL ohne Meldung:

1    data dummy;
2      length a 5 b c $10;
3      retain _VARDUMMYN . _VARDUMMYC ' '4      drop _VARDUMMYN _VARDUMMYC;
5      array CHARACTERVARS _CHARACTER_;
6      array NUMERICVARS _NUMERIC_;
7      stop;
8    run;
NOTE: The data set WORK.DUMMY has 0 observations and 3 variables.