El script define una macro '%linked' que automatiza la creación de un informe principal y múltiples subinformes detallados. Utiliza PROC SQL para identificar dinámicamente los años disponibles en los datos. El informe principal contiene enlaces de hipertexto (drill-down) específicamente para la línea de producto 'Sports', que conducen a archivos HTML detallados generados iterativamente para cada año a través de un bucle de macro.
Análisis de datos
Type : SASHELP
Los datos provienen de la tabla estándar 'sashelp.orsales'. No se requieren datos externos.
1 Bloque de código
PROC SQL
Explicación : Recupera la lista distinta de años presentes en la tabla 'sashelp.orsales' y almacena estos valores en una serie de macro-variables (:year1, :year2...) para controlar el bucle de generación posterior.
¡Copiado!
proc sql noprint;
select distinct year
into :year1 - :year99
from sashelp.orsales;
%let yearcnt = &sqlobs;
quit;
1
PROC SQL noprint;
2
select distinct year
3
into :year1 - :year99
4
from sashelp.orsales;
5
%let yearcnt = &sqlobs;
6
QUIT;
2 Bloque de código
PROC REPORT
Explicación : Genera el informe resumido principal. Utiliza un bloque 'COMPUTE' para construir dinámicamente una URL (enlace de desglose) cuando la línea de producto es 'Sports', apuntando al informe detallado del año correspondiente.
¡Copiado!
ods html style=default
path="&path\results"
body='E8_4b.html';
title1 'Total profit per year';
/* ... titres ... */
proc report data=sashelp.orsales nowd split='*';
column year product_line profit;
define year / group;
define product_line
/ group
'Product*Groups';
define profit / analysis
sum format=dollar15.2
'Annual*Profit';
break after year / summarize suppress skip;
rbreak after / summarize ;
compute before year;
yr = year;
endcomp;
compute product_line;
* For SPORTS create a link;
if product_line = 'Sports' then do;
link = 'Sports'||trim(left(put(yr,4.)))||'.html';
call define(_col_, 'url', link);
end;
endcomp;
run;
ods _all_ close;
1
ods html style=default
2
path="&pathesults"
3
body='E8_4b.html';
4
5
title1 'Total profit per year';
6
/* ... titres ... */
7
8
PROC REPORTDATA=sashelp.orsales nowd split='*';
9
column year product_line profit;
10
define year / group;
11
define product_line
12
/ group
13
'Product*Groups';
14
define profit / analysis
15
sum FORMAT=dollar15.2
16
'Annual*Profit';
17
break after year / summarize suppress skip;
18
rbreak after / summarize ;
19
20
compute before year;
21
yr = year;
22
endcomp;
23
compute product_line;
24
* For SPORTS create a link;
25
IF product_line = 'Sports'THENDO;
26
link = 'Sports'||trim(left(put(yr,4.)))||'.html';
27
call define(_col_, 'url', link);
28
END;
29
endcomp;
30
RUN;
31
32
ods _all_ close;
3 Bloque de código
PROC REPORT
Explicación : Bucle de macro que itera sobre cada año detectado. Para cada año, genera un archivo HTML distinto que contiene el detalle de las ganancias para la categoría 'Sports', filtrado a través de una cláusula WHERE dinámica.
¡Copiado!
%do yr = 1 %to &yearcnt;
* Sports Detail Report for &&year&yr;
ods html style=default
path="&path\results"
body="Sports&&year&yr...html";
title2 "Sports Detail for &&year&yr";
title3 "<a href='E8_4b.html'>Return to Full Report<a>";
proc report data=sashelp.orsales(where=(product_line='Sports' & year=&&year&yr))
nowd split='*';
column product_category profit;
/* ... définitions colonnes ... */
rbreak after / summarize ;
run;
ods _all_ close;
%end;
1
%DO yr = 1 %to &yearcnt;
2
* Sports Detail Report for &&year&yr;
3
ods html style=default
4
path="&pathesults"
5
body="Sports&&year&yr...html";
6
7
title2 "Sports Detail for &&year&yr";
8
title3 "<a href='E8_4b.html'>Return to Full Report<a>";
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.