Publicado el :
Macro MIXTE

Generación de informes HTML dinámicos a través de macros

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
El script define una macro principal `message_js` que escribe un archivo HTML iterando sobre listas de macro-variables. Utiliza macros de utilidad (prefijo AHG) para gestionar estas listas. El script consulta la vista `sashelp.vlibnam` para listar las bibliotecas activas (excluyendo SASHELP, SASUSER, MAPS) y transformarlas en enlaces HTML. Una segunda macro `dosomething` verifica la existencia de archivos específicos (a través de una ruta definida en `__snapshot`) y genera la página HTML final que luego se abre mediante un comando del sistema.
Análisis de datos

Type : MIXTE


Utiliza datos codificados (datalines/cards4 a través de la macro AHG2arr) y metadatos de sesión SAS (sashelp.vlibnam).

1 Bloque de código
DATA STEP
Explicación :
Definición de la macro `message_js` que crea un archivo de texto (HTML) a través de un Data Step `_NULL_`. Itera sobre los prefijos de las variables proporcionadas para escribir el contenido. Luego ejecuta un comando del sistema `x` para abrir el archivo generado (comando específico de Windows 'start', a adaptar para Linux).
¡Copiado!
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 Bloque de código
MACRO CALL Data
Explicación :
Inicialización de variables macro y creación de datos HTML estáticos mediante llamadas a la macro de utilidad `%AHG2arr` y bloques `cards4`.
¡Copiado!
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 Bloque de código
PROC SQL Data
Explicación :
Recuperación de las rutas de las bibliotecas SAS activas (excluyendo bibliotecas del sistema) de `sashelp.vlibnam` para construir etiquetas de anclaje HTML.
¡Copiado!
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 Bloque de código
DATA STEP
Explicación :
Transferencia de la lista de URLs generadas desde la tabla SAS a macro-variables (`url1`, `url2`, etc.) para su uso posterior.
¡Copiado!
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 Bloque de código
MACRO CALL
Explicación :
Definición y ejecución de la macro `dosomething`. Verifica la presencia de archivos específicos en un directorio `__snapshot` (si está definido), construye enlaces dinámicos si los archivos existen y finalmente llama a `message_js` para generar el informe HTML.
¡Copiado!
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);
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.