Posts Tagged ‘tagsets’

h1

Plusieurs tableaux par feuille de calcul (ODS TAGSETS.EXCELXP)

août 13, 2009

Avec SAS, la syntaxe de l’ODS TAGSETS.EXCELXP permet de créer des fichiers .xls. Voici comment imprimer créer plusieurs feuilles de calculs et d’inclure dans chacune d’elle plusieurs tableaux.

1. Plusieurs feuilles de calcul

Il est possible d’ inclure plusieurs tableaux dans des feuilles de calcul différentes. C’est le cas par défaut. Le nom de chaque feuille est personnalisable avec l’option SHEET_NAME=’xxx’.

Ici deux tables sont imprimées dans deux feuilles de calcul distinctes.

ods listing close;
ods tagsets.excelxp file=‘c:/sasref/multi_sheets.xls’;

ods tagsets.excelxp options(sheet_name=‘<13 ans’);
proc print data=sashelp.class (where=(age < 13));
run;

ods tagsets.excelxp options(sheet_name=‘>=13 ans’);
proc print data=sashelp.class (where=(age >= 13));
run;

ods tagsets.excelxp close;
ods listing;

Le résultat :

xls_multi_sheets

2. Plusieurs tables dans une feuille de calcul grâce à SHEET_INTERVAL=’none’

Il est également possible d’afficher toutes les tables sur une feuille de calcul avec l’option SHEET_INTERVAL=’none’.

Ici,  deux tableaux sont affichées dans la même feuille de calcul.

ods listing close;
ods tagsets.excelxp file=‘c:/sasref/multi_tables.xls’ options(sheet_interval=‘none’ sheet_name=‘Multi Ages’);

proc print data=sashelp.class (where=(age < 13));
run;

proc print data=sashelp.class (where=(age >= 13));
run;

ods tagsets.excelxp close;
ods listing;

Le résultat :

xls_multi_tables

3. Plusieurs tableaux par feuille

Voici maintenant comment agencer le code pour mettre plusieurs tableaux sur une feuille de calcul et plusieurs autres sur une autre feuille.

Ici deux tables sont affichées dans  la première feuille et deux autres dans la seconde feuille de calcul. A chaque fois qu’une nouvelle feuille de calcul est à créer l’option SHEET_INTERVAL=’none’. Entre temps, tous les tableaux sont affichés sur la même feuille.

ods listing close;
ods tagsets.excelxp file=‘c:/sasref/multi_tables_sheets.xls’;

ods tagsets.excelxp options(sheet_name=‘<13 ans’ sheet_interval=‘none’);
proc print data=sashelp.class (where=(sex=‘M’ and age < 13));
run;
proc print data=sashelp.class (where=(sex=‘F’ and age < 13));
run;

ods tagsets.excelxp options(sheet_name=‘>=13 ans’ sheet_interval=‘none’);
proc print data=sashelp.class (where=(sex=‘M’ and age >= 13));
run;
proc print data=sashelp.class (where=(sex=‘F’ and age >= 13));
run;

ods tagsets.excelxp close;
ods listing;

Le résultat :

xls_multi_tables_sheets

Lectures complémentaires

h1

Changer la couleur d’une ligne ou d’une colonne via PROC REPORT et ODS

juillet 30, 2009

Après vous avoir présenter comment changer la couleur d’une cellule dans un fichier .xls, je vous propose de voir comment changer la couleur de toute une colonne ou de toute une ligne avec PROC REPORT et ODS TAGSETS.EXCELXP. Cela est intéressant pour distinguer votre ligne/colonne TOTAL du reste de vos données. Notez que la syntaxe s’applique également avec ODS RTF et ODS PDF par exemple.

1. Changer le style de couleur pour une colonne

Pour changer la couleur d’une colonne, on utilisera STYLE(COLUMN)=[] dans l’instruction DEFINE de son choix.

Pour changer la couleur d’une ligne, il faudra passer par COMPUTE/ENDCOMP et CALL DEFINE. Pour changer la couleur d’une celulle, nous avions dans le précédent article utiliser _COL_ comme premier argument. Pour appliquer la couleur à toute la ligne, il suffira de remplacer ce premier argument par _ROW_.

ods listing close;
ods tagsets.excelxp file=‘C:/sasref/col_row_color.xls’;

proc report data=sashelp.class nowd;
column name age;
define name / ‘Nom’ display style(column)=[background=lightblue];
define age / ‘Age’ display;
compute age;
if age=15 then call define (_ROW_,‘style’,‘style=[background=lightblue foreground=red ]’);
endcomp;
run;

ods tagsets.excelxp close;
ods listing;

Dans l’exemple ci-dessus la colonne Nom est mise en bleu clair. Les lignes où l’âge est égal à 15 ans sont mises en bleu clair également et le texte est mis en rouge.

2. Voir le résultat

xls_color_row_column

Lectures complémentaires

h1

Un moyen simple de changer les couleurs en fonction des valeurs prises par des variables dans un fichier .xls

juillet 26, 2009

Suite à la question de Pierre, je vous invite à découvrir comment changer la couleur de données selon leur valeurs dans un fichier .xls généré au moyen d’ODS TAGSETS.EXCELXP et PROC REPORT.

1. Le code de base à améliorer

ODS TAGSETS.EXCELXP FILE=’…xls ‘ / ODS TAGSET.EXCELXP CLOSE : Pour l’exemple, un fichier CLASS_COLOR.XLS est créé.

PROC REPORT : Il contient les données de la variable AGE disponibles dans la table SASHELP.CLASS.

ODS LISTING CLOSE/ODS LISTING : Aucune sortie n’est envoyée vers la destination traditionnelle LISTING le temps de la création du fichier .xls.

ods listing close;
ods tagsets.excelxp file=‘C:/sasref/class_color.xls’;
proc report data=sashelp.class nowd;
column age;
define age / ‘Age’ display;
run;
ods tagsets.excelxp close;
ods listing;

2. L’ajout de COMPUTE dans PROC REPORT

A présent les intructions COMPUTE et ENDCOMP englobe une condition. Si la variable AGE est égale à 15 alors tous la valeur 15 est mise en rouge (foreground=) et la couleur de fond de la cellule est bleu clair (background=).

Pour cela, on utilise CALL DEFINE si et seulement si AGE=15. CALL DEFINE est composé de trois paramètres :

  • _COL_
  • ‘style’
  • ‘style=[à compléter]’

ods listing close;
ods tagsets.excelxp file=‘C:/sasref/class_color.xls’;
proc report data=sashelp.class nowd;
column age;
define age / ‘Age’ display;
compute age;
if age=15 then call define (_COL_,‘style’,‘style=[background=lightblue foreground=red]’);
endcomp;
run;
ods tagsets.excelxp close;
ods listing;

3. Voir le résultat

xls_compute

4. Quelques styles supplémentaires

Pour compléter la liste des styles, vous avez par exemple:

  • Changer la taille des caractères : font_size=14pt (mettre en taille 14 points)
  • Changer l’inclinaison des caractères : font_style=italic (mettre en italique)
  • Changer l’épaisseur des traits formant les caractères : font_weight=bold  (mettre en gras)
  • Changer la police de caractères : font_face= »Courier New, Arial » (utiliser Courier New si disponible, sinon utiliser Arial).

Lectures complémentaires :

h1

Personnaliser l’apparence des titres et pieds-de-page dans un fichier.xls (ODS TAGSETS.EXCELXP et PROC TEMPLATE)

juillet 14, 2009

Après vous avoir présenté les options EMBEDDED_TITLES et EMBEDDED_FOOTNOTES dans l’article : Ajouter les titres et pieds-de-page dans une feuille de calcul du fichier .xls, je vous propose de personnaliser l’apparence de vos titres au moyen d’un nouveau style créé dans une instruction PROC TEMPLATE.

1. Créer un style personnaliser pour ses titres et pieds de page

Le nouveau style s’appelle XLS_TITL. Comme base, nous prenons un style existant sous SAS : STYLES.DEFAULT et faisont quelques modification au niveau des titres et pieds-de-page.

proc template;
define style styles.xls_titl;
parent=styles.rtf;

style systemtitle from systemtitle /
background=transparent
foreground=#000000
font_style=roman
font_weight = medium
font_size=18pt
font_face=‘Arial’;

style systemfooter from systemfooter/
background=transparent
foreground=#000000
font_style=roman
font_weight = medium
font_size=14pt
font_face=‘Arial’;

end;
run;

  • BACKGROUND modifie la couleur de font des cellules (voir l’article : choisir ses couleurs sous SAS). Notez que le mot TRANSPARENT ne fonctionne pas avec la version 1.86 de TAGSETS.EXCELXP mais avec certaines versions plus anciennes. Mettre à jour ses TAGSETS pour EXCELXP »
  • FOREGROUND modifie la couleur du texte
  • FONT_STYLE empêche l’inclinaison par défaut (enlever l’italique : roman, mettre en italic : italic)
  • FONT_WEIGHT enlève la côté gras présent par défaut (enlever les gras : medium, mettre en gras : bold)
  • FONT_SIZE défini la taille des caractères
  • FONT_FACE liste les polices à utiliser. Si plusieurs polices sont listées entre guillemets, la première disponible sur l’ordinateur sera retenue.

2. Appeler le style dans l’instruction ODS TAGSETS.EXCELXP

L’option STYLE= a été ajouté dans la première instruction ODS TAGSETS.EXCELXP . Elle est suivie du nom du style créé préalablement. Cela donne STYLE=XLS_TITL.

ods listing close;
ods tagsets.excelxp file=‘C:/sasref/class.xls’ style=xls_titl
options(embedded_titles=‘yes’
embedded_footnotes=‘yes’);

title ‘Titre’;
footnote ‘Pied’;
ods tagsets.excelxp;

proc report data=sashelp.class nowd;
columns name age;
define name/display ‘Nom’;
define age /display ‘Age’;
run;

ods tagsets.excelxp close;
ods listing;

Pour le reste des explications concernant cette syntaxe, reportez-vous à l’article de la semaine dernière.

3. Voir le résultat

02_xls_title

Lectures complémentaires :

h1

Ajouter les titres et pieds-de-page dans la feuille de calcul du fichier .xls

juillet 9, 2009

Lors de la création d’un fichier .xls au moyen de la syntaxe ODS TAGSETS.EXCELXP sous SAS, le contenu des instructions TITLE et FOOTNOTE est envoyé respectivement dans l’entête et pied-de-page du fichier. Ils ne sont donc visibles qu’à l’impression.

Pour insérer le contenu des instructions TITLE et FOOTNOTE dans la feuille de calcul, il faudra ajouter deux options dans l’instruction ODS TAGSETX.EXCELXP : EMBEDDED_TITLES etEMBEDDED_FOOTNOTES.

1. Le code

Voici le code pour l’exemple. Vous noterez que j’ai rajouté une instruction ODS… juste après les instructions TITLE et FOOTNOTE. Cela permet à SAS de mettre à jour les titres et pieds-de-page qu’il a en mémoire. Cela sera pratique lorsque vous aurez plusieurs feuilles de calculs avec des titres différents. Autrement, vous pouvez ajouter les instructions TITLE et FOOTNOTES avant la première instruction ODS TAGSETS.EXCELXP.

ods listing close;
ods tagsets.excelxp file=‘C:/sasref/class.xls’
options(embedded_titles=‘yes’
embedded_footnotes=‘yes’);

title ‘Titre’;
footnote ‘Pied’;
ods tagsets.excelxp;

proc report data=sashelp.class nowd;
columns name age;
define name/display ‘Nom’;
define age /display ‘Age’;
run;

ods tagsets.excelxp close;
ods listing;

L’option NOWD est propre à un environnement Windows. Cela évite l’ouverture de la fenêtre REPORT

2. Voir le résultat

Résultat ods tagsets.excelxp options embedded_titles embedded_footnotes

3. Enlever les lignes blanches entre les titres/pieds-de-page et la table

Pour empêcher l’insertion d’une ligne entre le(s) titre(s) et la table, le(s) pied(s)-de-page et la table, il faut faire appel à l’option SKIP_SPACE=.

Avant d’aller plus loin, il faut noter que

  • la ligne d’espace entre le titre est la table est lié au TITRE et
  • la ligne entre la table et le pied-de-page est lié à la TABLE et non au pied-de-page.

Cette option de l’instruction ODS TAGSETS.EXCELXP est composée de 5 nombres.

  • Le premier nombre fait référence à la TABLE
  • Le 3ème nombre est lié au TITRE
  • Le 4ème nombre fait référence au PIED-DE-PAGE.

Par défaut SKIP_SPACE=’1,0,1,1,1′.

Pour ôter les lignes séparant la table des titres et pieds-de-page, on aura : SKIP_SPACE=’0,0,0,1,1′. On enlevera la ligne après la table avec le premier zéro et la ligne après le titre avec le troisième zéro.

01_xls_title_extra

A venir

Je vous propose de découvrir dans les deux articles à venir des compléments sur les titres et pieds-de-page avec ODS TAGSETS.EXCELXP :

  • Créer un style pour personnaliser les couleurs, polices des titres/pieds-de-page avec un PROC TEMPLATE.
  • Utiliser un titre plus grand que la largeur donnée par les colonnes du tableau

Lectures complémentaires

h1

Mettre à jour ses TAGSETS pour EXCELXP

juin 4, 2009

Créer un fichier XML ouvrable avec Excel est possible avec l’ODS TAGSETS.EXCELXP de SAS. Il est important de disposer des dernière mises à jour des tagsets de EXCELXP pour utiliser son potentiel. Quelle version utilisez-vous actuellement ? Comment faire la mise à jour ?

1. Quelle version de TAGSETS.EXCELXP utilisez-vous ?

Pour connaître la version de TAGSETS.EXCELXP que vous utilisez, consultez la log après avoir exécuté ce PROC TEMPLATE.

proc template;
source tagsets.excelxp;
run;

2.  Comment faire les mises à jour ?

Allez sur la page http://support.sas.com/rnd/base/ods/odsmarkup/ pour trouver le code à exécuter dans SAS.

Par exemple, pour la mise à jour 1.86 (15 avril 2008), copiez dans votre éditeur SAS le code http://support.sas.com/rnd/base/ods/odsmarkup/excltags.tpl et exécutez-le.

En soumettant une nouvelle fois la procédure PROC TEMPLATE, la log nous indique que la version 1.86 est celle actuellement en place.

tagsets_version_v1_86

h1

En-tête et pied de page avec TAGSETS.EXCELXP

juin 1, 2009

La syntaxe de l’ODS TAGSETS.EXCELXP permet de créer sous SAS un fichier lisible par Excel. Pour vous familiariser avec cette syntaxe, je vous invite à lire les articles : Mes premiers pas avec ODS TAGSETS.EXCELXP, partie 1, partie 2 et partie 3.

Deux options servent à ajouter une en-tête et un pied de page au fichier à imprimer : print_header et print_footer.

Sous Excel 2003, cela correspond aux écrans suivants :

excelp_header

excelp_footer

1. La syntaxe de base

Ici le fichier HEADER_FOOTER.xls est créé au moyen de l’instruction ODS TAGSETS.EXCELXP. La feuille de calcul s’appelle « Exemple ». Les options PRINT_HEADER et PRINT_FOOTER sont encore à définir.

Le fichier contient les informations de la table CLASS contenue dans la bibliothèque SASHELP.

ods listing close;
ods tagsets.excelxp file=‘c:/sasref/header_footer.xls’
options(sheet_name=‘Exemple’
print_header=‘à définir’
print_footer=‘à définir’);
proc print data=sashelp.class;
run;
ods tagsets.excelxp close;
ods listing;

ODS LISTING : L’instruction ODS LISTING CLOSE, en début de programme, stoppe la création d’une sortie dans la fenêtre OUTPUT. L’instruction ODS LISTING réactive la destination LISTING.

Comme la syntaxe de PRINT_HEADER est la même que celle de PRINT_FOOTER, nous nous concentrons ici sur un seul d’entre eux dans les explications qui suivent : PRINT_FOOTER.

2. Avec la version 2003 d’Excel

Alignement : par défaut le texte est centré.

  • &amp;L : Aligner à gauche (left)
  • &amp;C : Centrer (center)
  • &amp;R : Aligner à droite (right)

Passage à la ligne

  • & #13; : Passer à la ligne (ne pas mettre d’espace entre & et #)

Le nom du fichier et de la feuille de calcul

  • &amp;Z : chemin d’accès au fichier
  • &amp;F : nom du fichier
  • &amp;A : nom de la feuille de calcul

Date et heure

  • &amp;D : date
  • &amp;T : heure

Police de styles

  • &amp;&quot;ma police&quot; mon texte :  introduit la police (Century Gothic, gras, italique ici)
  • &amp;12 :  introduit une taille du texte (12pt ici)
  • &amp; : clos la zone concernée par la police de styles

Le numéro de page

  • &amp;P : numéro de la page
  • &amp;N : nombre total de pages

Exemple : dans l’exemple qui suit, deux lignes de texte à gauche, une ligne au milieu et une à droite.

  • A gauche se trouve le chemin complet d’accès au fichier ainsi que le nom de la feuille de calcul  (C:/sasref/header_footer.xls, Exemple)
  • Toujours à gauche, sur la deuxième ligne est ajouté la date et l’heure
  • Au centre, est noté http://www.sasreference.fr en gras, italique avec un style Century Gothic de taille 12.
  • A droite, est ajouté le numéro de la page et le nombre total de pages (1/1).

&amp;L&amp;Z&amp;F.xls, &amp;A
& #13;&amp;D&amp;T
&amp;C&amp;&quot;Century Gothic,Bold Italic&quot;&amp;12www.sasreference.fr&amp;
&amp;R&amp;P/&amp;N

3. Avec la version d’Excel 2007

Alignement

  • &L : aligner à gauche
  • &R : aligner à droite
  • Le texte à centrer est mis en premier car le texte est centré par défaut.

Passage à la ligne

  • & #13; (comme avec Excel 2003)

Le nom du fichier et de la feuille de calcul

  • &P : chemin d’accès au fichier
  • &N : nom du fichier
  • &B : nom de la feuille de calcul

Date et heure

  • &D : date
  • &U<7span> : heure

Police de style (comme avec Excel 2003)

  • &amp;&quot;….&quot; :  introduit la police (Century Gothic, gras, italique ici)
  • &amp;12 :  introduit une taille du texte (12pt ici)
  • &amp; : clos la zone concernée

Vous pouvez aussi utiliser simplement &F pour mettre un texte en gras.

Le numéro de page

  • &S : numéro de la page
  • &A : nombre total de pages

Exemple :

  • &Fwww.sasreference.fr
  • &L&P&N.xls, &B
  • & #13;&D &U
  • &R&S/&A

Conclusion

La syntaxe reste difficilement mémorisable. Mais une fois celle-ci créée, il est possible de faire des copier/coller sans soucis particulier.

Pour chaque nouvelle feuille de calcul, l’option doit être définie. Ici, aucune proposition n’est faite pour définir de manière globale les en-têtes et pieds de page.

La syntaxe pour ajouter une image n’est pas donnée ici.

Le plus gros problème reste que la syntaxe varie selon la version d’Excel utilisée comme le confirme la note suivante de l’aide en ligne du tagset ExcelXP pour PRINT_HEADER ne donne pas toujours la bonne syntaxe.

h1

Mes 1ers pas avec ODS TAGSETS.EXCELXP (1/3)

mai 12, 2008

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;