Veröffentlicht am :
Makro SASHELP

Überprüfung der Existenz einer Makrovariable mit Geltungsbereich

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Makro, benannt `mvartest`, erweitert die Funktionalität der SAS©-Makrofunktion `%SYMEXIST()`. Es ermöglicht die Bestimmung, ob eine Makrovariable existiert, nicht nur anhand ihres Namens, sondern auch innerhalb eines spezifischen Makro-Geltungsbereichs. Die Eingabeparameter sind `mvar` (der Name der zu überprüfenden Makrovariable) und `scope` (der optionale Makro-Geltungsbereich, in dem die Suche durchgeführt werden soll). Das Makro konstruiert dynamisch eine WHERE-Klausel, um die Systemansicht `sashelp.vmacro` abzufragen. Es gibt den Wert `1` zurück, wenn die Makrovariable im angegebenen Geltungsbereich (oder global, wenn kein Geltungsbereich angegeben ist) gefunden wird, und `0` sonst.
Datenanalyse

Type : SASHELP


Das Makro fragt ausschließlich die Systemansicht `sashelp.vmacro` ab, die Metadaten zu allen vorhandenen Makrovariablen in der SAS-Sitzung enthält. Es werden keine anderen externen Datenquellen verwendet oder erstellt.

1 Codeblock
Makrologik (Konstruktion der WHERE-Klausel)
Erklärung :
Dieser erste Block initialisiert drei lokale Makrovariablen: `dsid` (für die Dataset-ID), `rc` (für den Rückgabecode) und `where` (für die Filterklausel). Anschließend wird die `WHERE`-Klausel konstruiert, die zur Abfrage der Ansicht `sashelp.vmacro` verwendet wird. Wenn der Parameter `scope` angegeben ist, wird die Suche auf den angegebenen Geltungsbereich beschränkt, der in Großbuchstaben umgewandelt wird. Andernfalls schließt die Suche den Geltungsbereich des aktuellen Makros (`&sysmacroname`) aus. Schließlich wird die `WHERE`-Klausel ergänzt, um den Namen der zu suchenden Makrovariable (`&mvar`) einzuschließen, ebenfalls in Großbuchstaben umgewandelt.
Kopiert!
1%local dsid rc where;
2 
3%IF %LENGTH(&scope) %THEN %let where=scope=%upcase("&scope");
4%ELSE %let where=scope ^= "&sysmacroname" ;
5%let where=name=%upcase("&mvar") and &where;
2 Codeblock
Makro-Funktionalitäten für den Datenzugriff
Erklärung :
Dieser zweite Block führt die Überprüfungslogik aus. Er verwendet die Funktion `%sysfunc(open())`, um die Systemansicht `sashelp.vmacro` zu öffnen und dabei die zuvor definierte `WHERE`-Klausel anzuwenden. Wenn das Öffnen des Datasets erfolgreich ist (d.h. `&dsid` ist nicht null), versucht das Makro, einen Datensatz mit `%sysfunc(fetch(&dsid))` abzurufen. Wird ein Datensatz gefunden (angezeigt durch einen Rückgabecode ungleich -1), bedeutet dies, dass die Makrovariable im gesuchten Geltungsbereich existiert. Das Dataset wird anschließend mit `%sysfunc(close(&dsid))` geschlossen. Das Makro gibt `1` zurück, wenn die Makrovariable gefunden wird, und `0` sonst.
Kopiert!
1%let dsid = %sysfunc(open(sashelp.vmacro(where=(&where))));
2%IF (&dsid) %THEN %DO;
3 %eval(%sysfunc(fetch(&dsid)) ^= -1)
4 %let rc = %sysfunc(close(&dsid));
5%END;
6%ELSE 0;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.