Veröffentlicht am :
Macro GEMISCHT

Dynamische HTML-Berichtsgenerierung über Makros

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Das Skript definiert ein Hauptmakro `message_js`, das eine HTML-Datei durch Iteration über Listen von Makrovariablen schreibt. Es verwendet Hilfsmakros (Präfix AHG) zur Verwaltung dieser Listen. Das Skript fragt die Ansicht `sashelp.vlibnam` ab, um aktive Bibliotheken (außer SASHELP, SASUSER, MAPS) aufzulisten und in HTML-Links umzuwandeln. Ein zweites Makro `dosomething` überprüft die Existenz spezifischer Dateien (über einen in `__snapshot` definierten Pfad) und generiert die endgültige HTML-Seite, die dann über einen Systembefehl geöffnet wird.
Datenanalyse

Type : GEMISCHT


Verwendet fest definierte Daten (datalines/cards4 über das Makro AHG2arr) und SAS-Sitzungsmetadaten (sashelp.vlibnam).

1 Codeblock
DATA STEP
Erklärung :
Definition des Makros `message_js`, das eine Textdatei (HTML) über einen Data Step `_NULL_` erstellt. Es iteriert über die bereitgestellten Variablenpräfixe, um den Inhalt zu schreiben. Anschließend führt es einen Systembefehl `x` aus, um die generierte Datei zu öffnen (Windows-spezifischer Befehl 'start', für Linux anzupassen).
Kopiert!
1%macro message_js(pre,file=) ;
2
3 DATA _null_ ;
4 file "&file";
5 put "&html1";
6 put "&html2";
7 put "&html3";
8 %local i J one;
9 %DO j=1 %to %AHGcount(&pre);
10 %let one=%scan(&pre,&j,%str( ));
11 %IF not %symexist(&one._n) %THEN
12 %DO;
13 %IF %bquote(%sysfunc(rank(%substr(%bquote(&&&one),1,1))))=34
14 or %bquote(%sysfunc(rank(%substr(%bquote(&&&one),1,1))))=39 %THEN put %unquote(&&&one);
15 %ELSE put "%unquote(&&&one)";
16 %END;
17 %ELSE
18 %DO i=1 %to &&&one._n;
19 %put ############### &&&one&i;
20 %IF %bquote(%sysfunc(rank(%substr(%bquote(&&&one&i),1,1))))=34
21 or %bquote(%sysfunc(rank(%substr(%bquote(&&&one&i),1,1))))=39 %THEN put %unquote(&&&one&i);
22 %ELSE put "%unquote(&&&one&i)";
23 ;
24 put;
25 %END;
26 %END;
27 put "&html4";
28 put "&html5";
29 RUN ;
30 
31 x "start &file";
32%mend message_js ;
33option mprint;
2 Codeblock
MACRO CALL Data
Erklärung :
Initialisierung von Makrovariablen und Erstellung statischer HTML-Daten über Aufrufe des Hilfsmakros `%AHG2arr` und `cards4`-Blöcke.
Kopiert!
1%AHGdel(html,like=1);
2 
3%AHG2arr(html);
4cards4;
5
6
7
8
9
10;;;;
11RUN;
12 
13%AHG2arr(btn);
14cards4;
15'c:\temp\ahuige'>dd
16;;;;
17RUN;
18 
19%let alink='c:\temp\ahuige'>c;
3 Codeblock
PROC SQL Data
Erklärung :
Abrufen der Pfade aktiver SAS-Bibliotheken (außer Systembibliotheken) aus `sashelp.vlibnam` zur Erstellung von HTML-Anker-Tags.
Kopiert!
1%AHGdel(url,like=1);
2 
3PROC SQL;
4 create TABLE html as
5 select '''<a href="'||trim(path)||'">'||compress(LIBNAME)||'</a>''' as url
6 from sashelp.vlibnam
7 WHERE not LIBNAME in ( 'SASHELP','SASUSER','MAPS');
8;
9QUIT;
4 Codeblock
DATA STEP
Erklärung :
Übertragung der Liste der generierten URLs aus der SAS-Tabelle in Makrovariablen (`url1`, `url2` usw.) zur späteren Verwendung.
Kopiert!
1DATA _null_;
2 SET html;
3 call symput('url'||%AHGputN(_n_,BEST.),TRIM(url));
4 call symput('url_N',_N_);
5RUN;
6 
7%AHGpmlike(url);
5 Codeblock
MACRO CALL
Erklärung :
Definition und Ausführung des Makros `dosomething`. Es überprüft das Vorhandensein spezifischer Dateien in einem Verzeichnis `__snapshot` (falls definiert), erstellt dynamische Links, falls die Dateien existieren, und ruft schließlich `message_js` auf, um den HTML-Bericht zu generieren.
Kopiert!
1%macro dosomething(arr);
2%AHGdel(&arr,like=1);
3%local i j all;
4%IF %symexist(__snapshot) %THEN
5%DO;
6 %let all= programs_stat replica_programs ;
7 %let j=0;
8 %DO i=1 %to %AHGcount(&all);
9 %PUT GREAT &I;
10 %IF %sysfunc(fileexist(&__snapshot\%scan(&all,&i,%str( )))) %THEN
11 %DO;
12 %AHGincr(j);
13 %let &arr&j=%bquote('<a href="&__snapshot\%scan(&all,&i,%str( ))">%scan(&all,&i,%str( ))</a>');
14 %AHGpm(&arr&j);
15 %LET &ARR._N=&j;
16 %END;
17 %END;
18
19%END;
20 
21%message_js(URL btn alink %IF %symexist(__snapshot) %THEN &arr;,file=%AHGtempdir\js.html);
22/*&arr*/
23%mend;
24%doSomething(APATH33);
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.