SAS9

Wie testet man effizient einen fehlenden Wert in einer SAS-Makrovariable?

Simon 4 vistas

Eine der häufigsten Verwechslungen beim Erlernen der SAS©-Makrosprache ist der Umgang mit fehlenden Werten. Im Gegensatz zum Data-Step, wo ein Punkt (.) einen fehlenden numerischen Wert darstellt, behandelt der Makroprozessor alles als Text.

Dieser Artikel erklärt Ihnen, wie Sie eine leere (null) Makrovariable von einer Makrovariable, die einen Punkt enthält, unterscheiden und wie Sie diese Tests korrekt durchführen.

Wie testet man effizient einen fehlenden Wert in einer SAS-Makrovariable? -

Die häufige Falle: der Punkt (.) vs. die Leere

Es ist entscheidend, die Art Ihrer Variable zu verstehen:

  1. Leere Makrovariable (Null): Sie enthält keine Zeichen.

    • Beispiel: %let maVar = ;

  2. Makrovariable, die einen Punkt enthält: Sie enthält das Zeichen „.“. Für den Makroprozessor ist dies eine Zeichenkette der Länge 1, kein fehlender Wert.

    • Beispiel: %let maVar = .;

Wenn Sie %if &maVar = . testen, prüfen Sie buchstäblich, ob die Variable das Zeichen „Punkt“ enthält, und nicht, ob sie leer ist.

Methode 1: Verwendung der Funktion %LENGTH (Empfohlen)

Die robusteste Methode, um zu überprüfen, ob eine Makrovariable „leer“ oder „null“ ist, besteht darin, ihre Länge zu testen.

Um zu überprüfen, ob eine Variable leer ist:

1%IF %LENGTH(&maVar) = 0 %THEN %DO;
2 
3%put Die Variable ist leer.;
4 
5%END;
6 

Um zu überprüfen, ob eine Variable einen Wert enthält (nicht leer):

Diese Syntax funktioniert, da in SAS© jede Zahl ungleich 0 als „Wahr“ (True) ausgewertet wird.

1%IF %LENGTH(&maVar) %THEN %DO;
2 
3%put Die Variable enthält etwas (Länge > 0).;
4 
5%END;
6 
Achtung: Wenn %let a = .;, dann ist %length(&a) gleich 1. Der obige Test wird daher davon ausgehen, dass die Variable nicht leer ist.

Methode 2: Der direkte Vergleich

Eine weitere gängige Methode ist der Vergleich der Variablen mit einer leeren Zeichenkette.

1%IF &maVar = %THEN %DO;
2 
3%put Die Variable ist leer.;
4 
5%END;
6 
Hinweis: Diese Methode ist manchmal weniger lesbar als die Verwendung von %length, aber sie ist funktionsfähig.

Häufige Syntaxfehler, die zu vermeiden sind

Achten Sie beim Schreiben dieser Bedingungen auf die Struktur Ihrer %if / %then / %else-Blöcke.

Der Fehler mit dem Semikolon nach %else

Ein klassischer Fehler ist es, ein Semikolon direkt nach dem %else zu platzieren, was die Anweisung vorzeitig beendet.

Note :
Falsch:
1/* Le point-virgule après %else empêche l'exécution du bloc suivant */
2%IF %LENGTH(&a) %THEN %DO;
3 %put Existe;
4%END;
5%ELSE;
6 %put N'existe pas;
Note :
Richtig:
1%IF %LENGTH(&a) %THEN %DO;
2 %put Existe;
3%END;
4%ELSE %DO;
5 %put N'existe pas;
6%END;
  • Die Makrosprache verarbeitet Text.

  • Ein Punkt (.) ist ein Zeichen, kein fehlender Wert im Sinne von Makros.

  • Verwenden Sie %if %length(&var) = 0, um auf einen Nullwert (leer) zu testen.

  • Um das Thema fehlender und logischer Werte in Makros zu vertiefen, sind die Arbeiten von Chung und King zu diesem Thema solide technische Referenzen.