SAS propose une alternative au PROC EXPORT pour créer un fichier Excel à partir de données SAS. Il s’agit de l’ODS TAGSETS.EXCELXP. Celle-ci fait preuve de flexibilité tant pour ajouter les labels des variables, définir la largeur des colonnes qu’ajouter les filtres aux colonnes ou encore créer plusieurs feuilles par fichier Excel. Voici donc le premier des articles consacrées à mes découvertes de ces derniers jours sur le sujet : « syntaxe de base et options changeables au niveau de la procédure Proc Report ».
1. La syntaxe de base : tout d’abord, il s’agit d’encadrer la proc report, proc print, ou autre entre deux instructions ODS TAGSETS.EXCELXP. La première instruction servira en premier lieu à définir le nom et la destination du nouveau fichier Excel. La seconde instruction fermera le processus de création du fichier Excel.
ods tagsets.excelxp file=‘C:/excel/mon_nouveau_fichier.xls’;
proc report data=resultats;
columns pop grp subgrp check;
define pop / display ‘Pop’;
define grp / display ‘Pays’;
define subgrp / display ‘Ville’;
define check / display ‘Check’;
run;
ods tagsets.excelxp close;
Un premier essai au résultat et on se rendra compte de plusieurs « imperfections » que l’on souhaitera changer à commencer par la largeur des colonnes.
2. Changer la largeur des colonnes : avec un PROC REPORT, il est possible d’affiner l’apparence (le STYLE) des colonnes et notamment celui de la largeur des colonnes. Si on veut que toutes les colonnes soient de la même largeur, l’option STYLE(COLUMN) sera ajoutée dans l’instruction PROC REPORT, sinon elle sera ajoutée dans chaque instruction DEFINE. Si un grand nombre de colonnes doit avoir la même largeur, il est possible de combiner les deux méthodes. Tout d’abord, la largeur la plus fréquente dans l’instruction PROC REPORT est définie. Ensuite, les colonnes devant avoir une valeur différente sont actualisées dans leur instruction DEFINE.
proc report data=resultats style(column)=[cellwidth=3cm];
columns pop grp subgrp check;
define pop / display ‘Pop’
style(column)=[cellwidth=5cm];
define grp / display ‘Pays’;
define subgrp / display ‘Ville’;
define check / display ‘Check’;
run;
Note : Les options WIDTH= et FLOW des instructions DEFINE perdent ici leur utilisé puisque le texte n’est pas coupé.
3. Centrer ou aligner à gauche, à droite : de la même manière que définir la largeur des colonnes, changer l’alignement du texte (pas des nombres) est possible avec JUST=center (left ou right). Par défaut, les textes sont alignés à gauche et les nombres sont alignés à droite. On peut choisir de changer l’alignement :
- soit au niveau des valeurs (style(column)),
- soit au niveau du nom des variable (style(header)).
Gérer certains formatage avec TAGATTR= est un autre attribut possible de STYLE(COLUMN). Voici deux exemples d’application :
- Sur le même principe que le format Zw., les zéros situées en entête d’une variable numérique sont conservés. On ajoutera autant de zéro que nécessaire.
- Les variables numériques sont affichées comme du texte, si l’arobas @ est utilisé.
- Mais il ne semble pas possible de combiner les deux notations. Mais corrigez-moi si je me trompe.
proc report …;
define check / display ‘Check’
style(column)=[tagattr=’format:000′];
define check / display ‘Check’
style(column)=[tagattr=’format:@’];
run;
4. Un nom de colonne commun à plusieurs colonnes : sous Excel, il est très simple de sélectionner deux cellules et de demander à ce qu’elles n’en forment plus qu’une seule. Pour faire la même chose en SAS, on fait appel à la syntaxe de PROC REPORT.
columns pop (‘Zone géographique’) grp subgrp check;
Si on choisi de combiner des cellules, l’ajout d’un filtre sur les colonnes concernées peut paraître inapproprié. En effet, le filtre n’utilisera que les valeurs de la première colonne.
Dans la seconde partie (lundi prochain) sur ODS TAGSETS.EXCELXP, vous verrez comment modifier les couleurs, la police de caractère, etc. en créant un template.
Annexe : data set servant d’exemple
data resultats;
input pop grp $2. subgrp $5. check $4.;
datalines;
1 AL Alger 001A
1 AL Oran 003
1 MO Rabat 002
2 CH Bern 001A
2 NO Oslo 004
;
run;