Das Skript liest oder erstellt keine konventionellen SAS-Datensätze. Es interagiert direkt mit dem SAS-Log, um Text zu extrahieren und diesen in eine externe Textdatei zu schreiben.
1 Codeblock
MACRO DÉFINITION
Erklärung : Dieser Block definiert das `%cliplog`-Makro. Es ist darauf ausgelegt, einen Abschnitt des SAS-Logs mithilfe der Display Manager-Befehle (`dm`) zu erfassen. Das Makro deaktiviert vorübergehend die `mprint`-Option, um die Aufnahme seiner eigenen Anweisungen in das erfasste Log zu verhindern. Es lokalisiert eine Zeichenkette (`marker1` verkettet mit `marker2`), markiert diese Position und dann das Ende des Logs. Der Inhalt zwischen diesen beiden Punkten wird in die SAS-Zwischenablage kopiert und dann in die durch den Parameter `file` angegebene Datei geschrieben. Schließlich wird der Befehl `x "notepad &file"` verwendet, um die generierte Datei in Notepad zu öffnen, und die `mprint`-Option wird wiederhergestellt.
Kopiert!
%macro cliplog(marker1,marker2,pos=last,file=c:\test.txt) ;
* note: split search text in half so we dont go and find it in our macro call ;
* note: save mprint option since we want mprint turned off for the macro run, otherwise
we get our search text written to the log and we will find it ;
%let o=%sysfunc(getoption(mprint)) ;
options nomprint ;
/* log;
find '&marker1&marker2' &pos;
rfind;
mark;
bottom;
mark;
store;
unmark;
notepad;
clear;
paste;
file '&file';
end
*/
dm "log;find '&marker1&marker2' &pos;mark;bottom;mark;store;unmark;notepad;clear;paste;file '&file';end" ;
* view the file in windows notepad ;
x "notepad &file" ;
options &o ;
%mend cliplog ;
Erklärung : Dieser Block demonstriert die Verwendung des `%cliplog`-Makros. Die Zeile `***BEGIN***;` ist eine SAS-Anweisung, die einen Marker in das Log schreibt. Der Kommentar `/* now run all the SAS code you would like to capture */` gibt an, wo der Code eingefügt werden soll, dessen Log erfasst werden soll. Der Aufruf `%cliplog(***BEGIN,***);` führt das Makro aus, um das Log zu erfassen. Das Makro sucht nach dem ersten Vorkommen von `***BEGIN***` (rückwärts suchend, wenn `pos=last`), markiert diese Position, dann das Ende des Logs und kopiert den Text zwischen diesen beiden Punkten.
Kopiert!
***BEGIN***; /* this marks where to start the copying from the log */
/* now run all the SAS code you would like to capture */
%cliplog(***BEGIN,***) ; /* finally we call the macro which captures the log from the point we previously marked */
1
***BEGIN***;
2
/* this marks where to start the copying from the log */
3
/* now
4
run all the SAS code you would like to capture */
5
%cliplog(***BEGIN,***) ;
6
/* finally we call the macro which captures the log from the point we previously marked */
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.