Publié le :
Macro MIXTE

Génération de rapport HTML dynamique via Macros

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script définit une macro principale `message_js` qui écrit un fichier HTML en itérant sur des listes de macro-variables. Il utilise des macros utilitaires (préfixe AHG) pour gérer ces listes. Le script interroge la vue `sashelp.vlibnam` pour lister les bibliothèques actives (hors SASHELP, SASUSER, MAPS) et les transformer en liens HTML. Une seconde macro `dosomething` vérifie l'existence de fichiers spécifiques (via un chemin défini dans `__snapshot`) et génère la page HTML finale qui est ensuite ouverte via une commande système.
Analyse des données

Type : MIXTE


Utilise des données définies en dur (datalines/cards4 via la macro AHG2arr) et les métadonnées de session SAS (sashelp.vlibnam).

1 Bloc de code
DATA STEP
Explication :
Définition de la macro `message_js` qui crée un fichier texte (HTML) via un Data Step `_NULL_`. Elle itère sur les préfixes de variables fournis pour écrire le contenu. Elle exécute ensuite une commande système `x` pour ouvrir le fichier généré (commande spécifique Windows 'start', à adapter pour Linux).
Copié !
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 Bloc de code
MACRO CALL Data
Explication :
Initialisation de variables macro et création de données HTML statiques via des appels à la macro utilitaire `%AHG2arr` et des blocs `cards4`.
Copié !
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 Bloc de code
PROC SQL Data
Explication :
Récupération des chemins des bibliothèques SAS actives (hors bibliothèques système) depuis `sashelp.vlibnam` pour construire des balises d'ancrage HTML.
Copié !
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 Bloc de code
DATA STEP
Explication :
Transfert de la liste des URLs générées depuis la table SAS vers des macro-variables (`url1`, `url2`, etc.) pour utilisation ultérieure.
Copié !
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 Bloc de code
MACRO CALL
Explication :
Définition et exécution de la macro `dosomething`. Elle vérifie la présence de fichiers spécifiques dans un répertoire `__snapshot` (si défini), construit des liens dynamiques si les fichiers existent, et appelle enfin `message_js` pour générer le rapport HTML.
Copié !
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);
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Ce script illustre une technique de pointe pour transformer SAS en un moteur de génération de tableaux de bord interactifs. L'enjeu ici est de dépasser le simple listing de données pour créer une interface de navigation HTML dynamique, capable de cartographier l'environnement de travail (bibliothèques et fichiers) en temps réel.

Cette méthode est idéale pour créer des "Launchpads" ou des rapports d'audit de migration. En centralisant la définition des liens dans des macro-variables, vous séparez la logique de données (SQL/DATA Step) de la présentation (HTML), ce qui facilite grandement la maintenance du code et sa portabilité entre différents serveurs. »