Posts Tagged ‘foreground’

h1

Passer par un format pour changer les couleurs d’une cellule dans un tableau (PROC REPORT et ODS)

septembre 17, 2009

Dans de précédents articles, je vous ai parlé de la possibilité de changer le style des cellules d’un tableau. Je vous invite ici à découvrir comment un format peut vous éviter de passer par un COMPUTE/ENDCOMP de PROC REPORT pour changer le style selon les valeurs prises par une variable donnée.

1. Créer les formats pour l’exemple

Pour mettre en gras (bold) ou non, il faut passer par le style FONT_WEIGHT. Dans notre exemple, ce style prendra la valeur BOLD quand la variable AGE aura des valeurs entre 14 et 16 ans et un LIGHT pour un style non gras. Vous avez aussi à disposition la valeur MEDIUM pour un ton légèrement plus prononcé.

Pour changer la couleur du texte, c’est le style FOREGROUND qu’il faut utiliser. Dans notre cas, le texte aura la couleur bleu si la variable AGE est comprise entre 14 et 16 ans inclus.

proc format;
value age_font 1113=‘light’
1416=‘bold’;
value age_color 1416=‘blue’;
run;

2. Utiliser le format dans PROC REPORT

Pour changer le style d’une colonne en particulier, il suffit d’ajouter style(column)=[…] dans l’instruction DEFINE.

Ici au lieu de donner une couleur à toutes les valeurs avec FOREGROUND= suivi du nom de la couleur, on donne le format AGE_COLOR. qui prendra la valeur BLUE pour les AGE des 14-16 ans.

De manière similaire, l’épaisseur du trait est changée avec FONT_WEIGHT et le format AGE_FONT. défini auparavant.

ods listing close;
ods pdf file=‘C:/sasref/zebre.pdf’;
proc report data=sashelp.class nowd;
columns name age;
define name / display ;
define age / display style(column)=[font_weight=age_font. foreground=age_color.];
run;
ods pdf close;
ods listing;

3. Voir le résultat

color_format

Lectures complémentaires

Des questions ? Envoyez votre message sur le forum du blog.

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

Améliorer l’habillage de vos tableaux (débuter avec PROC TEMPLATE via PROC REPORT)

juin 2, 2008

La syntaxe ODS (Output Delivery System) de SAS fait appel à des templates pour définir la mise en forme des tableaux, graphiques à publier. Dans le cas présent, il s’agira de définir un template qui s’appliquera à tous les tableaux générés par un PROC REPORT. Les styles caractérisant les templates sont définis avec la procédure PROC TEMPLATE. Tout d’abord, il s’agit de savoir comment appliquer les styles sans template pour un seul PROC REPORT et ainsi se familiariser avec la syntaxe.

1. Le tableau par défaut

Le programme suivant créé un document RTF (CLASS_V1.RTF) contenant un tableau avec 5 colonnes. Les données proviennent du data set CLASS de la bibliothèque SAS.

ods rtf file = ‘C:/sasreference/class_v1.rtf’;
proc report data=sashelp.class nowd;
   columns sex name age height weight;
   define sex    / display ‘Sexe’;
   define name   / display ‘Nom’;
   define age    / display ‘Age’;
   define height / display ‘Taille’;
   define weight / display ‘Poids’;
run;
ods rtf close;

Le tableau est quadrillé. Les lettres sont alignées à gauche et les chiffres à droite. Le nom des colonnes ont un fond grisé et sont mises en gras. Le tout a une police Times New Roman de taille 10pt.

2. Des styles pour trois destinations différentes

Dans PROC REPORT, on peut ajouter des options au niveau de l’instruction PROC REPORT pour appliquer le résultat à l’intégralité de la table ou dans une instruction DEFINE en particulier pour agir sur une colonne. Il est possible de grouper les deux méthodes. Par exemple, on peut choisir d’avoir des colonnes de trois centimètres partout sauf dans une colonne.

  • STYLE(COLUMN) : pour changer les informations au niveau des colonnes, c’est-à-dire les données sans le titre, on ajoutera STYLE(COLUMN)=[…] dans l’instruction DEFINE.
  • STYLE(HEADER) : pour modifier les caractéristiques des noms de colonnes, les headers, il faudra utiliser STYLE(HEADERr)=[…]
  • STYLE(REPORT) : pour définir les bordures, leur position, couleur et épaisseur, et les espaces entre les cellules, STYLE(REPORT)=[…] est utilisé dans l’instruction PROC REPORT.

3. De multiples options

Les options sont listées dans les crochets, Un espace sert de séparateur entre les options. Voici un aperçu de ces options:

3.1 Agir sur le texte

  • FONT_FACE= ou comment définir une police différente de Times : pour changer la police en Arial, on fait appel à FONT_FACE=’Arial’.
  • FONT_SIZE= ou comment opter pour une taille de caractères différente de 10pt : pour changer la taille du texte en 12, cela donne FONT_SIZE=12pt.
  • FONT_WEIGHT ou comment jongler entre gras et normal : pour mettre en gras, on utilisera FONT_WEIGHT=BOLD. Si au contraire est déjà en gras, et qu’on souhaite le remettre en normal, il faut choisir FONT_WEIGHT=MEDIUM.
  • FOREGROUND= ou comment changer la couleur du texte : l’option FOREGROUND= sert à définir la couleur du texte. Ainsi FOREGROUND=DARKBLUE mettra le texte en bleu foncé.

3.2 Agir sur la position du texte

  • JUST= ou comment changer l’alignement en largeur du texte dans une cellule : par défaut les lettres sont alignés à gauche et les nombres sont alignés à droite. Pour définir le même alignement partout et ensuite changer ponctuellement si besoin, il y a JUST=. Ainsi, JUST=C (center) centre, JUST=R (right) aligne à droite et JUST=L (left) aligne à gauche.
  • VJUST= ou comment changer l’alignement vertical du texte dans une cellule : si le texte d’une case s’étend sur plusieurs lignes, celui des autres cellules est aligné vers le haut. Pour changer l’alignement, on utilise VJUST=BOTTOM.

3.3 Changer la couleur de fond

  • STYLE(COLUMN)=[BACKGROUND=…] ou comment changer le fond des cellules contenant les observations.
  • STYLE(HEADER)=[BACKGROUND=…] ou comment changer la couleur de fond des titres des colonnes.
  • STYLE(REPORT)=[BACKGROUND=… ] ou comment changer l’arrière plan : défini dans STYLE(REPORT), la couleur s’applique à l’arrière du tableau. Si l’espace qui sépare les cellules n’est pas de zéro (CELLSPACING), cette couleur de fond apparaît. Par défaut la couleur noir apparaît entre les cellules. On peut soit changer la couleur pour blanc (BACKGROUND=WHITE) ou réduire l’espace entre les cellules à zéro (CELLSPACING=0).
  • CELLWIDTH= ou comment définir la largeur des colonnes : la largeur de toutes les cellules d’une colonne est défini par CELLWIDTH. Cela donne CELLWIDTH=3cm.

3.4 Agir sur les bordures

  • BORDERCOLOR= ou comment changer la couleur des bordures
  • BORDERWIDTH= ou comment changer  la largeur des bordures du cadre (frame).
  • FRAME= ou comment décider quels côtés du cadre doivent apparaître : on distingue huit valeurs pour FRAME :
    • BOX garde tout le cadre extérieur
    • VOID enlève les bords du cadre
    • HSIDES (horizontal side) garde les deux côtés horizontaux
    • VSIDES (vertical side) garde les deux côtés verticaux
    • ABOVE garde la ligne du dessus,
    • BELOW garde la ligne du dessous
    • LHS (left hand side) garde le côté gauche
    • RHS (right hand side) garde le côté droite
  • RULES= ou comment décider quelles lignes à l’intérieur du tableau doivent être visible : on a cinq valeurs à disposition pour RULES :
    • NONE (none ou aucun) enlève toutes les lignes intérieures
    • ROWS (row ou ligne) ne garde que les lignes horizontales
    • COLS (column ou colonne) ne garde que les lignes verticales
    • GROUP ne garde que la ligne séparant les titres de colonnes, des observations.

Voici donc un schéma récapitulalif des combinaisons de FRAME et RULES lorsque, dans STYLE(REPORT), BACKGROUND=WHITE ou CELLSPACING=0. Pour facilité la lecture, l’effet de FRAME est en noir et celui de RULES est en rouge.

*NB: Cette image contient une erreur : remplacez grps par group.

4. L’effet final avec les options de PROC REPORT

Voici un résumé de l’Exemple ci-dessous :

  • Seules les bordures du haut et du bas sont gardées (FRAME=HSIDES), et épaissie (BORDERWIDTH=.2cm) après avoir mis en blanc l’arrière plan du tableau pour qu’il n’apparaisse pas entre les cellules (BACKGROUND=WHITE). On choisi de séparer les titres des valeurs par une ligne  (RULES=GROUPS) et de mettre tous les trais en gris (BORDERCOLOR=GRAY).
  • Au niveau des titres, la couleur de fond est enlevée (BACKGROUND=WHITE).  Une police Arial de 12pt non gras est choisie.
  • Enfin au niveau des données, la police est également Arial de taille 12pt. Les colonnes sont de 3 cm de largeur et le texte est aligné à droite.

ods rtf file  = ‘C:/sasreference/final_v1.rtf’
        style = sasref;

proc report data=sashelp.class nowd
   style(report)=[rules       = groups
                  frame       = hsides
                  background  = white
                /*cellspacing = 0*/
                  bordercolor = gray
                  borderwidth = .2cm]
   style(header)=[background  = white
                  font_size   = 12pt
                  font_face   = ‘Arial’
                  font_weight = medium]
   style(column)=[font_size   = 12pt
                  font_face   = ‘Arial
                  cellwidth   = 3 cm
                  just        = r];
   columns name sex age height weight;
   define name   / display ‘Nom’;
   define sex    / display ‘Sexe’;
   define age    / display ‘Age’;
   define height / display ‘Taille’;
   define weight / display ‘Poids’;
run;

ods rtf close;

5. Obtenir le même résultat avec un proc template

 A présent que vous avez vu les différentes régions sur lesquelles vous pouvez agir et une grande partie des options que vous pouvez changer, voici la syntaxe de PROC TEMPLATE.

Ici, le nouveau template s’appelle SASREF (DEFINE STYLE). Il est basé sur le style par défaut (PARENT=).

proc template;
   define style styles.sasref;
   parent = styles.default;
   /*.à compléter..*/
   end;
run;

Vous remarquerez que les informations listées dans REPLACE TABLE sont les mêmes que dans notre précédent ODS(REPORT). Celles listées dans REPLACE HEADER correspondent à celle de ODS(HEADER) et enfin celle de REPLACE DATE sont identiques à ODS(COLUMN).

proc template;
   define style styles.sasref;
   parent = styles.default;
   replace table /  rules       = groups
                    frame       = hsides
                    background  = white
                  /*cellspacing = 0*/
                    bordercolor = gray
                    borderwidth = .2cm;
   replace header / foreground  = black
                    background  = white
                    font_size   = 12pt
                    font_face   = ‘Arial’
                    font_weight = medium;
   replace data   / background  = white
                    font_size   = 12pt
                    font_face   = ‘Arial’
                    cellwidth   = 3 cm
                    just        = r;
   end;
run;

Vous noterez en plus l’utilisation de FOREGOUND dans REPLACE HEADER et BACKGROUND dans REPLACE DATA. En effet, si vous appelez le template sans les instructions REPLACE, SAS ajoute un font gris aux données et met les titres en bleu.

A présent, il s’agit de faire référence à ce template dans l’instruction ODS RTF.

ods rtf file  = ‘C:/sasreference/class_v1.rtf’
        style = sasref;

Avant de terminez, il vous faudra supprimer le template.

proc template;
   delete styles.sasref;
run;

h1

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

mai 19, 2008

Sous SAS, l’ODS TAGSETS.EXCELXP est une alternative au PROC EXPORT. Dans une première partie, vous avez vu comment modifier la largeur d’une colonne, gérer l’alignement des valeurs textes et former une cellule unique servant de titre à plusieurs colonnes, le tout avec la syntaxe de proc report. Maintenant vous allez découvrir comment modifier les couleurs, polices de caractères, etc. en créant un nouveau template.

1. La structure de base de PROC TEMPLATE

Une autre particularité que l’on rencontrera dans le fichier Excel, c’est la présence de la couleur grise pour le fond ces cellules ayant des données, une couleur bleuté pour le texte des cellules contenant le nom des variables, etc.

Pour altérer ces couleurs, disons remettre du blanc en fond et du texte en noir, on va créer un nouveau template à partir d’un existant. Il suffira alors de modifier les quelques paramètres qui nous intéresse.

La structure de base du PROC TEMPLATE est la suivante :

proc template;
   define style styles.vero_xls;
   parent=style.default;
   *style x from x /…;
run;

J’ai donné le nom vero_xls à ce nouveau STYLE. Vous pouvez choisir le nom qui vous plaira. L’important est de se référer au même nom par la suite. 

2. Les instructions STYLE de PROC TEMPLATE

Il existe plusieurs instructions STYLE, selon qu’il s’agisse :

  • de la partie non couverte par les données : style Table from Table
  • de la partie couverte par les noms de colonnes : style Header from Header
  • de la partie couverte par le nom des lignes (dans un proc print, les valeurs de la variable obs) : style RowHeader from RowHeader
  • de la partie couverte par les données : style Data from Data
  • de l’apparence de la page A4 d’impression : style Body from Body

Voicic trois autres styles :

  •    style SystemTitle from SystemTitle /…;
  •    style SystemFooter from SystemFooter /…;
  •    style SysTitleAndFooterContainer from SysTitleAndFooterContainer /…;

3. Les options des instructions STYLE

Les options sont situées après la barre inclinée (slash /). Les valeurs prises par ces options sont notées entre guillemets.

 Les options les plus courantes sont :

  • FOREGROUND = (couleur du texte). Ici, on choisira le mot ‘black’ entre guillemets.
  • BACKGROUND = (couleur des cellules). Ici, on choisira ‘white’.
  • FONT_SIZE = (la taille du texte). Ici, on choisira 1.5 par exemple.
  • FONT_FACE = (la ou les polices de caractères). Ici, on choisi ‘Courier’. Mais on peut aussi opter pour ‘Courier,Arial’. Ainsi si la police Courier n’est pas disponible, Arial sera le second choix.

Deux autres options du langage courant

  • FONT_WEIGHT= (mette en gras). La valeur BOLD sert à mettre en gras
  • FONT_STYLE= (mettre en italique ou non). La valeur ITALIC met en italique tandis que ROMAN fait l’inverse.

Agir dur les bordures des cellules :

  • BORDER_COLOR= (couleur de la bordure)
  • BORDER_WIDTH= (largeur de la bordure)

Agir sur les marges du document A4.

  • LEFTMARGIN = (marge de gauche)
  • RIGHTMARGIN = (marge de droite)
  • TOPMARGIN = (marge du haut)
  • BOTTOMMARGIN = (marge du bas)

Note : Une liste des différents styles est disponible sur ce forum : http://www.tek-tips.com/viewthread.cfm?qid=1178234&page=1.

4. Faire référence au nouveau template

Pour que ce template soit lu à la place de celui par défaut, on ajoutera STYLE=nom_du_nouveau_template dans l’instruction ODS TAGSETS.EXCELXP de début.

ods tagsets.excelxp file  = ‘C:/excel/mon_nouveau_fichier.xls’
                    style = vero_xls;
proc report …;
run;
ods tagsets.excelxp close;

Après avoir vu les actions menées au niveau du PROC REPORT et du PROC TEMPLATE pour personnaliser son fichier Excel, vous verrez dans le troisième et dernier article sur « Mes premiers pas avec ODS TAGSETS.EXCELXP », lundi prochain, les options disponibles dans l’instruction ODS.