Das Makro operiert hauptsächlich mit Makrovariablennamen, die als Parameter übergeben werden. Für die optionale Löschung kompilierter Makros fragt es die Systemansicht `dictionary.catalogs` (Teil von SASHELP) ab und manipuliert die SAS-Systemkataloge.
1 Codeblock
LANGAGE MACRO SAS
Erklärung : Dieser Block verwendet Makrosprachfunktionen, um über eine Liste von Variablennamen (als Basisnamen für Makrovariablen-Arrays betrachtet) zu iterieren. Für jeden Namen löscht er alle indizierten Makrovariablen (z.B. `meinArray1`, `meinArray2`) sowie die speziellen Variablen `LBOUND`, `HBOUND` und `N`, die die Grenzen und die Größe des Makrovariablen-Arrays definieren. Die Option `NOWARN` verhindert Warnungen, falls eine Makrovariable nicht existiert.
Erklärung : Dieser Block wird ausgeführt, wenn der Parameter `macarray` anzeigt, dass Makros gelöscht werden sollen. Er verwendet `%sysfunc(dosubl(...))`, um einen SAS-Codeblock im Submit-Modus auszuführen. Dieser Block:
1. Verwendet `PROC SQL`, um die Ansicht `dictionary.catalogs` abzufragen, um kompilierte Makros (`objtype = 'MACRO'`) in der Bibliothek `WORK` zu identifizieren, deren Namen mit den in `arrs` angegebenen übereinstimmen. Die Ergebnisse werden in einer temporären Tabelle gespeichert.
2. Ein `DATA _NULL_`-Schritt mit `CALL EXECUTE` generiert dynamisch `PROC CATALOG`-Anweisungen für jedes identifizierte Makro. `PROC CATALOG` wird dann mit der Option `force` verwendet, um die entsprechenden Makroeinträge aus dem WORK-Katalog zu löschen.
3. Schließlich löscht `PROC DELETE` die temporäre Tabelle, die von `PROC SQL` erstellt wurde.
Kopiert!
%if %qupcase(&macarray.) in (Y YES) %then
%do;
%let rc = %sysfunc(dosubl(
/*+++++++++++++++++++++++++++++++++++++++++++++*/
options nonotes nosource %str(;)
proc sql noprint %str(;)
create table _%sysfunc(datetime(), hex16.)_ as
select memname %str(,) objname
from dictionary.catalogs
where
objname in (%upcase(
%str(%")%qsysfunc(tranwrd(&arrs., %str( ), %str(%,%"))))%str(%")
))
and objtype = 'MACRO'
and libname = 'WORK'
order by memname %str(,) objname
%str(;)
quit %str(;)
data _null_ %str(;)
do until(last.memname) %str(;)
set _last_ %str(;)
by memname %str(;)
if first.memname then
call execute('proc catalog cat = work.'
!! strip(memname)
!! ' et = macro force;') %str(;)
call execute('delete '
!! strip(objname)
!! '; run;') %str(;)
end %str(;)
call execute('quit;') %str(;)
run %str(;)
proc delete data = _last_ %str(;)
run %str(;)
/*+++++++++++++++++++++++++++++++++++++++++++++*/
));
%end;
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.
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.