Le script définit une macro '%linked' qui automatise la création d'un rapport principal et de multiples sous-rapports détaillés. Il utilise PROC SQL pour identifier dynamiquement les années disponibles dans les données. Le rapport principal contient des liens hypertextes (drill-down) spécifiquement pour la ligne de produit 'Sports', menant vers des fichiers HTML détaillés générés itérativement pour chaque année via une boucle macro.
Analyse des données
Type : SASHELP
Les données proviennent de la table standard 'sashelp.orsales'. Aucune donnée externe n'est requise.
1 Bloc de code
PROC SQL
Explication : Récupère la liste distincte des années présentes dans la table 'sashelp.orsales' et stocke ces valeurs dans une série de macro-variables (:year1, :year2...) pour piloter la boucle de génération ultérieure.
Copié !
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 Bloc de code
PROC REPORT
Explication : Génère le rapport sommaire principal. Utilise un bloc 'COMPUTE' pour construire dynamiquement une URL (lien drill-down) lorsque la ligne de produit est 'Sports', pointant vers le rapport détaillé de l'année correspondante.
Copié !
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 Bloc de code
PROC REPORT
Explication : Boucle macro itérant sur chaque année détectée. Pour chaque année, elle génère un fichier HTML distinct contenant le détail des profits pour la catégorie 'Sports', filtré via une clause WHERE dynamique.
Copié !
%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>";
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.