Das Makro interagiert hauptsächlich mit dem SAS-Metadatenserver, um Stored Processes zu verwalten. Es verbraucht für seine Hauptlöschfunktion keine externen Daten oder SASHELP-Datasets direkt. Die verarbeiteten Daten sind Metadateninformationen, die vom SAS-System selbst generiert und verwaltet werden.
1 Codeblock
DATA STEP (metadata_pathobj) und Macro IF
Erklärung : Dieser Block initialisiert das Makro `mm_deletestp` und führt einen ersten Überprüfungsschritt durch. Er verwendet einen `DATA _NULL_`-Schritt mit der Funktion `metadata_pathobj`, um den Metadatenserver abzufragen. Ziel ist es, festzustellen, ob ein 'StoredProcess' unter dem durch den Parameter `&target` angegebenen Pfad existiert. Der Typ (`type`) und der URI (`uri`) des gefundenen Objekts werden in Makrovariablen gespeichert. Wenn das Objekt nicht als 'ClassifierMap' (interner Typ für Stored Processes) identifiziert wird, wird eine Notiz ausgegeben und das Makro beendet, was das Fehlen des Stored Process signalisiert.
Kopiert!
%macro mm_deletestp(
target=
)/*/STORE SOURCE*/;
/**
* Check STP does exist
*/
%local cmtype;
data _null_;
length type uri $256;
rc=metadata_pathobj("","&target",'StoredProcess',type,uri);
call symputx('cmtype',type,'l');
call symputx('stpuri',uri,'l');
run;
%if &cmtype ne ClassifierMap %then %do;
%put NOTE: No Stored Process found at ⌖
%return;
%end;
Erklärung : Dieser Block bereitet die Löschung vor, indem zwei temporäre Filerefs (`__in` und `__out`) für die Eingabe und Ausgabe der `PROC METADATA`-Prozedur zugewiesen werden. Anschließend generiert ein `DATA _NULL_`-Schritt eine formatierte XML-Zeichenfolge direkt in die Datei `__in`. Diese Zeichenfolge stellt eine Metadaten-Löschungsanfrage dar, die auf das 'ClassifierMap'-Objekt abzielt, dessen ID in der Makrovariable `&stpuri` enthalten ist, und bereitet so die Anweisung für den Metadatenserver vor.
Kopiert!
filename __in temp lrecl=10000;
filename __out temp lrecl=10000;
data _null_ ;
file __in ;
put "<DeleteMetadata><Metadata><ClassifierMap Id='&stpuri'/>";
put "</Metadata><NS>SAS</NS><Flags>268436480</Flags><Options/>";
put "</DeleteMetadata>";
run ;
1
filename __in temp lrecl=10000;
2
filename __out temp lrecl=10000;
3
DATA _null_ ;
4
file __in ;
5
put "<DeleteMetadata><Metadata><ClassifierMap Id='&stpuri'/>";
6
put "</Metadata><NS>SAS</NS><Flags>268436480</Flags><Options/>";
7
put "</DeleteMetadata>";
8
RUN ;
3 Codeblock
PROC METADATA
Erklärung : Die Prozedur `PROC METADATA` wird ausgeführt, um die zuvor generierte XML-Anfrage (enthalten in `__in`) an den SAS-Metadatenserver zu übermitteln. Die Option `verbose` stellt sicher, dass maximale Informationen über die Ausführung und das Ergebnis der Anfrage protokolliert werden, wobei die Ausgabe in die temporäre Datei `__out` umgeleitet wird.
Kopiert!
proc metadata in=__in out=__out verbose;run;
1
PROC METADATA in=__in out=__out verbose;RUN;
4 Codeblock
DATA STEP (Lecture de fichier)
Erklärung : Dieser Block ist ein einfacher `DATA _NULL_`-Schritt, dessen Funktion darin besteht, den Inhalt der temporären Datei `__out` im SAS-Log zu lesen und anzuzeigen. Dies ermöglicht die Visualisierung der detaillierten Antwort des Metadatenservers nach dem Löschversuch.
Kopiert!
/* list the result */
data _null_;infile __out; input; list; run;
1
/* list the result */
2
DATA _null_;
3
INFILE __out;
4
INPUT;
5
list;
6
7
RUN;
8
5 Codeblock
SAS Global Statement
Erklärung : Diese `filename CLEAR`-Deklarationen sind wesentliche Anweisungen, um die verwendeten temporären Filerefs `__in` und `__out` sauber freizugeben. Dies ist eine bewährte Methode, um die unnötige Beibehaltung von Ressourcen und potenzielle Konflikte bei späteren SAS-Ausführungen zu vermeiden.
Kopiert!
filename __in clear;
filename __out clear;
1
filename __in clear;
2
filename __out clear;
6 Codeblock
DATA STEP (metadata_pathobj) und Macro IF
Erklärung : Dieser letzte Block führt eine entscheidende Überprüfung nach dem Löschversuch durch. Er verwendet erneut `metadata_pathobj`, um sicherzustellen, dass der Stored Process (`&target`) erfolgreich aus den Metadaten entfernt wurde. Wenn das Objekt immer noch gefunden und als 'ClassifierMap' identifiziert wird, wird eine Fehlermeldung im Log generiert, die Systemvariable `syscc` wird auf 4 gesetzt (was einen Fehler anzeigt), und das Makro wird beendet, um das Fehlschlagen der Löschung zu signalisieren. Das `%mend` markiert das Ende des Makros `mm_deletestp`.
Kopiert!
/**
* Check deletion
*/
%local isgone;
data _null_;
length type uri $256;
call missing (of _all_);
rc=metadata_pathobj("","&target",'Note',type,uri);
call symputx('isgone',type,'l');
run;
%if &isgone = ClassifierMap %then %do;
%put %str(ERR)OR: STP not deleted from ⌖
%let syscc=4;
%return;
%end;
%mend mm_deletestp;
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 : Copyright (c) 2001-2006 Rodney Sparapani. Dieser Code wird unter den Bedingungen der GNU General Public License (GPL) Version 2 oder höher vertrieben.
« Das Makro mm_deletestp ist ein hervorragendes Beispiel für die professionelle Administration einer SAS 9-Umgebung. Anstatt Objekte manuell über die SAS Management Console zu löschen, nutzt dieses Skript die Open Metadata Architecture (OMA), um Löschvorgänge zu automatisieren und auditierbar zu machen. Der Fokus auf den Objekttyp ClassifierMap ist hierbei entscheidend, da dieser in der Metadatenhierarchie die technische Definition eines Stored Process repräsentiert.
Strategische Empfehlungen & Best Practices
Bedeutung der Flags: In der XML-Anfrage wird der Wert <Flags>268436480</Flags> verwendet. Diese Bitmaske ist kritisch: Sie steuert, ob nur das Objekt selbst oder auch abhängige Assoziationen gelöscht werden. Ein falsches Flag könnte "verwaiste" Metadaten (wie Parameterdefinitionen oder Quellcode-Notizen) im Repository hinterlassen, was langfristig die Integrität der Metadatenbank beeinträchtigt.
Defensive Programmierung: Das Makro implementiert eine wichtige doppelte Validierung. Vor dem Löschen wird die Existenz via metadata_pathobj geprüft, und nach dem Prozess erfolgt eine Erfolgskontrolle. Die explizite Setzung von syscc=4 im Fehlerfall ist essenziell, damit übergeordnete Batch-Scheduler (wie LSF oder SAS Job Execution) den Abbruch des Prozesses registrieren können.
Physische vs. Logische Löschung: Beachten Sie, dass dieses Makro die Metadatendefinition löscht. Wenn der Quellcode des Stored Process in einer externen .sas-Datei auf dem Server liegt, bleibt diese Datei physisch erhalten. Für eine vollständige Bereinigung müsste das Makro um eine FDELETE-Logik für das Filesystem erweitert werden. »
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.