Hallo Wolfgang,
es gibt einen View in den SQL Dictionary Tables aus dem sich die Liste der vorhandenen Macros erstellen lässt. Das aktuell ausgeführte Makro sollte allerdings vom Löschen ausgenommen werden, weil (ohne /nowarn bei %SysMacDelete) sonst eine Fehlermeldung im LOG kommt.
Ich habe hier mal eine Version eines Löschen-Makros erstellt, %DeleteMacros(list), das noch eine Liste von Makronamen als Parameter hat, die nicht gelöscht werden sollen. Diese "Positiv-Liste" enthält einfach die Namen durch Leerzeichen getrennt. Im Code werden dann um die einzelnen Namen noch Anführungszeichen ergänzt und das ganze in einen IN (liste) Operator eingebaut - hier wird mit &SYSMACRONAME auch der Name des gerade laufenden Makros vom Löschen ausgenommen.
Im anschließenden Loop werden die Makros dann gelöscht.
* GP Loeschen von Makros aus dem Catalog Work.Sasmacr*;
Options mcompilenote = all;
%Macro DeleteMacros(listExclude);
%Local listMacros listExclude2 curMacro i;
%Let listExclude2 = "%Upcase(%Scan(&listExclude,1))";
%If ( %Length(&listExclude) > 1) %Then %Do i=2 %To %Sysfunc(countw(&listExclude));
%Let listExclude2 = &listExclude2 "%Upcase(%Scan(&listExclude,&i))";
%End;
Proc Sql noprint ;
Select objname Into :listMacros Separated By " "
From Dictionary.catalogs
Where libname = "WORK" And memname = "SASMACR" And objtype = "MACRO"
and objname Not In ("&SysMacroName" &listExclude2)
;
Quit;
%If ( %Symexist(debug) ) %Then %If ( &debug ) %Then %Put NOTE: [DeleteMacros] Macros to delete: &listMacros;
%Do i=1 %To &sqlobs;
%Let curMacro = %Scan(&listMacros,&i);
%If ( %Symexist(debug) ) %Then %If ( &debug ) %Then %Put NOTE: [DeleteMacros] Deleting &curMacro....;
%SysMacDelete &curMacro;
%End;
%If ( %Symexist(debug) ) %Then %If ( &debug ) %Then %Put NOTE: [DeleteMacros] done.;
%Mend;
%Macro test;
%Put test;
%Mend;
%Macro abc;
%Put abc;
%Mend;
%Macro aaa;
%Put aaa;
%Mend;
%DeleteMacros(aaa bbb);
%Let debug = 1;
%DeleteMacros();
Wird eine Globale MVAR DEBUG (auf 1) gesetzt, gibt das Makro noch ein paar Infos aus, was es gerade tut.
Hoffe, das hilft wieder einen Schritt weiter,
viele Grüße,
Grischa
... View more