Veröffentlicht am :
Makro GEMISCHT

Löschen von Makros aus dem Katalog work.sasmacr nach SQL-Muster

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Dieses Makro, `delmac`, wurde entwickelt, um vorhandene SAS©-Makros aus dem `work.sasmacr`-Katalog basierend auf einem vom Benutzer bereitgestellten SQL-'like'-Muster zu löschen. Es konvertiert zunächst das 'like'-Muster in Großbuchstaben und ersetzt Doppelpunkte (':') durch Prozentzeichen ('%') für die Kompatibilität mit SQL-Platzhaltern. Anschließend listet es alle Makros aus dem `work.sasmacr`-Katalog in einem temporären Datensatz namens `_listmac` auf. Ein `PROC SQL`-Schritt filtert diesen Datensatz, um Makros zu identifizieren, die dem Muster entsprechen, und speichert ihre Namen in einer Makrovariablen `delmac`. Der temporäre Datensatz `_listmac` wird anschließend gelöscht. Schließlich, wenn Makros identifiziert wurden, wird `PROC CATALOG` verwendet, um sie aus `work.sasmacr` zu löschen. Das Makro enthält eine grundlegende Fehlerbehandlung für einen leeren 'like'-Parameter und stellt die 'notes'-Option in ihren ursprünglichen Zustand wieder her. Das 'like'-Muster unterstützt die SQL-Platzhalter '_' (beliebiges Zeichen) und '%' (beliebige Zeichenfolge), wobei '\' zum Escaping von '_' verwendet wird.
Datenanalyse

Type : GEMISCHT


Der Code arbeitet mit dem `work.sasmacr`-Katalog der aktuellen SAS-Sitzung, der die kompilierten Makros enthält. Er erstellt einen temporären Datensatz `_listmac` in der `WORK`-Bibliothek, um die Liste der Makros zu speichern, bevor diese mit `PROC SQL` gefiltert werden. Es werden keine externen Daten gelesen oder für seine Funktion benötigt.

1 Codeblock
MACRO DEFINITION
Erklärung :
Dieser Block definiert das Makro `delmac` mit einem Parameter `like`. Er initialisiert lokale Variablen, erfasst den aktuellen Status der SAS-Option `notes` und deaktiviert sie für die Dauer des Makros. Er führt auch eine Validierung des `like`-Parameters durch und verarbeitet ihn für die SQL-Suche vor, indem er ihn in Großbuchstaben umwandelt und ':' durch '%' ersetzt.
Kopiert!
1%put MACRO CALLED: delmac v1.0;
2 
3%macro delmac(like);
4 %local delmac err savopts;
5 
6 %let err=ERR%str(OR);
7 %let savopts=%sysfunc(getoption(notes));
8 
9 options nonotes;
10 
11 %IF not %LENGTH(&like) %THEN %goto exit;
12 
13 %let like=%upcase(%sysfunc(translate(&like,%,:)));
2 Codeblock
PROC CATALOG Data
Erklärung :
Dieser Block verwendet `PROC CATALOG`, um alle Einträge vom Typ 'macro' aus dem Katalog `work.sasmacr` aufzulisten und sie in einen temporären Datensatz namens `_listmac` zu schreiben.
Kopiert!
1 
2PROC CATALOG catalog=work.sasmacr entrytype=macro;
3contents out=_listmac;
4 
5QUIT;
6 
3 Codeblock
PROC SQL
Erklärung :
Dieser `PROC SQL`-Block wählt Makronamen aus dem temporären Datensatz `_listmac` aus, die dem durch den Parameter `like` bereitgestellten Muster entsprechen. Die gefundenen Makronamen werden in der Makrovariablen `delmac` durch Leerzeichen getrennt verkettet. Die Option `escape '\'` ermöglicht die Verwendung des Zeichens '\' zum Escaping von SQL-Platzhaltern ('_').
Kopiert!
1 PROC SQL noprint;
2 select name into :delmac separated BY " " from _listmac
3 where name like "&like" escape '\';
4 QUIT;
4 Codeblock
PROC DATASETS
Erklärung :
Dieser Block verwendet `PROC DATASETS`, um den temporären Datensatz `_listmac` zu löschen, der nach dem Extrahieren der Makronamen nicht mehr benötigt wird.
Kopiert!
1 
2PROC DATASETS nolist;
3delete _listmac;
4 
5QUIT;
6 
5 Codeblock
PROC CATALOG
Erklärung :
Dieser Bedingungsblock prüft, ob die Makrovariable `delmac` Makronamen enthält (d.h., ob dem Muster entsprechende Makros gefunden wurden). Ist dies der Fall, wird `PROC CATALOG` verwendet, um diese Makros aus dem Katalog `work.sasmacr` zu löschen.
Kopiert!
1 %IF %LENGTH(&delmac) %THEN %DO;
2 PROC CATALOG catalog=work.sasmacr entrytype=macro;
3 delete &delmac;
4 QUIT;
5 %END;
6 Codeblock
MACRO LOGIC
Erklärung :
Dieser Block verwaltet die Exit-Logik des Makros. Er enthält ein `%exit:`-Label für die Fehlerbehandlung (wenn kein 'like'-Muster angegeben wird) und ein `%skip:`-Label für das normale Ende der Ausführung. Schließlich stellt er die SAS-Option `notes` auf ihren ursprünglichen Wert zurück, um sicherzustellen, dass das Makro die SAS-Umgebung nicht dauerhaft beeinträchtigt.
Kopiert!
1 %goto skip;
2 %exit: %put &err: (delmac) No "like" string supplied;
3 %skip:
4 
5 options &savopts;
6 
7%mend delmac;
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.
Urheberrechtsinformationen : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.