Publié le :
Reporting SASHELP

Création d'un document ODS avec plusieurs sorties

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le programme commence par créer trois tables de travail : `class`, `shoes`, et `cars`, en se basant sur les tables correspondantes de la bibliothèque SASHELP. La table `shoes` est filtrée pour ne garder que les régions 'Canada' et 'Pacific'. Ensuite, il ferme toutes les destinations ODS ouvertes et initie un nouveau document ODS nommé `doc_results`. Plusieurs rapports sont générés avec `PROC REPORT` sur les différentes tables, dont certains sont produits dynamiquement via une macro `%loopTroughMake` qui boucle sur les marques de voitures. Un graphique est également ajouté avec `PROC SGPLOT`. Enfin, le document ODS est fermé, consolidant toutes les sorties en un seul fichier.
Analyse des données

Type : SASHELP


Les données proviennent exclusivement de la bibliothèque SASHELP (tables class, shoes, cars).

1 Bloc de code
DATA STEP Data
Explication :
Crée la table `class` dans la bibliothèque WORK en copiant `sashelp.class` et en ajoutant une colonne constante `const`.
Copié !
1DATA class;
2 SET sashelp.class;
3 const = 1;
4RUN;
2 Bloc de code
PROC SORT
Explication :
Trie la table `class` par les variables `const` et `sex`.
Copié !
1PROC SORT DATA=class; BY const sex;RUN;
3 Bloc de code
DATA STEP Data
Explication :
Crée la table `shoes` en filtrant `sashelp.shoes` pour ne conserver que les régions 'Canada' et 'Pacific'.
Copié !
1DATA shoes;
2 SET sashelp.shoes;
3 WHERE region in ('Canada', 'Pacific');
4RUN;
4 Bloc de code
PROC SORT
Explication :
Trie la table `shoes` par `region` et `product`.
Copié !
1PROC SORT DATA=shoes; BY region product; RUN;
5 Bloc de code
DATA STEP Data
Explication :
Crée la table `cars` en copiant `sashelp.cars` et en ajoutant une colonne constante `const`.
Copié !
1DATA cars;
2 SET sashelp.cars;
3 const = 1;
4RUN;
6 Bloc de code
ODS
Explication :
Ferme toutes les destinations ODS actuellement ouvertes, puis ouvre une nouvelle destination `ODS DOCUMENT` nommée `doc_results` en mode écriture.
Copié !
1ODS _ALL_ CLOSE;
2 
3* start new ODS DOCUMENT;
4ODS DOCUMENT NAME=doc_results(WRITE);
7 Bloc de code
PROC REPORT
Explication :
Génère un rapport tabulaire des ventes de chaussures (`shoes`) groupé par région (`region`). Le label ODS et le titre sont définis pour l'identifier dans la sortie.
Copié !
1ODS PROCLABEL="Table 1: By Group Report about shoes";
2TITLE "Table 1: By Group Report about shoes";
3PROC REPORT DATA=shoes CONTENTS="";
4 BY region;
5 COLUMN region product sales;
6 DEFINE region / ORDER NOPRINT;
7 BREAK BEFORE region / CONTENTS="" page;
8RUN;
8 Bloc de code
PROC REPORT
Explication :
Génère un rapport listant les élèves de la table `class`. Un saut de page est forcé avant le début du rapport.
Copié !
1TITLE "Table 2: Table Class Output";
2ODS PROCLABEL "Table 2: Table Class Output";
3PROC REPORT DATA=class CONTENTS="";
4 COLUMN const name sex age height weight;
5 DEFINE const / ORDER NOPRINT;
6 BREAK BEFORE const / CONTENTS="" page;
7RUN;
9 Bloc de code
Macro
Explication :
Définit une macro `%loopTroughMake` qui génère un rapport `PROC REPORT` pour une marque de voiture (`make`) donnée. La macro accepte la marque et un numéro de table `i` en paramètres pour personnaliser le titre et le label ODS.
Copié !
1%MACRO loopTroughMake(make,i);
2 TITLE "Table &i: Multiple outputs - Cars for make = &make";
3 ODS PROCLABEL "Table &i: Multiple outputs - Cars for make = &make";
4 PROC REPORT DATA=cars(WHERE=(make = "&make")) nowd headline spacing=2 CONTENTS="";
5 COLUMN const make model type msrp;
6 DEFINE const / ORDER NOPRINT;
7 BREAK BEFORE const / CONTENTS="" page;
8 RUN;
9 TITLE;
10%MEND;
10 Bloc de code
Macro
Explication :
Appelle la macro `%loopTroughMake` trois fois pour générer des rapports pour les marques Acura, Audi et BMW.
Copié !
1%loopTroughMake(Acura,3);
2%loopTroughMake(Audi,4);
3%loopTroughMake(BMW,5);
4 
11 Bloc de code
PROC REPORT
Explication :
Génère un autre rapport sur la table `class`, similaire au deuxième rapport mais avec un titre et un label ODS différents.
Copié !
1ODS PROCLABEL="Table 6: Different label";
2TITLE "Table 6: Different title and label";
3PROC REPORT DATA=class CONTENTS="";
4 COLUMN const name sex age height weight;
5 DEFINE const / ORDER NOPRINT;
6 BREAK BEFORE const / CONTENTS="" page;
7RUN;
12 Bloc de code
PROC SGPLOT
Explication :
Crée un graphique à barres verticales (`VBAR`) avec `PROC SGPLOT` montrant l'âge (`age`) groupé par sexe (`sex`) à partir de la table `sashelp.class`.
Copié !
1ODS PROCLABEL="Figure 1: Class graphic";
2PROC SGPLOT DATA = sashelp.class;
3 VBAR age / GROUP = sex;
4 TITLE 'Figure 1: Class overview by sex and age';
5RUN;
13 Bloc de code
ODS
Explication :
Ferme la destination `ODS DOCUMENT`, ce qui finalise et sauvegarde le document `doc_results` avec toutes les sorties générées.
Copié !
1ODS DOCUMENT CLOSE;
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.
Informations de Copyright : Project: SMILE - SAS Macros, Intuitive Library Extension, Author: Katja Glass, License: MIT