Publié le :
Reporting SASHELP

Génération automatisée de rapports HTML liés avec navigation

Ce code est également disponible en : Deutsch English Español
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é !
1PROC 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é !
1ods html style=default
2 path="&pathesults"
3 body='E8_4b.html';
4 
5title1 'Total profit per year';
6/* ... titres ... */
7 
8PROC REPORT DATA=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' THEN DO;
26 link = 'Sports'||trim(left(put(yr,4.)))||'.html';
27 call define(_col_, 'url', link);
28 END;
29 endcomp;
30 RUN;
31 
32ods _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é !
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>";
9 
10 PROC REPORT DATA=sashelp.orsales(where=(product_line='Sports' & year=&&year&yr))
11 nowd split='*';
12 column product_category profit;
13 /* ... définitions colonnes ... */
14 rbreak after / summarize ;
15 RUN;
16 
17 ods _all_ close;
18%END;
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.