Posts Tagged ‘style’

h1

SAS 9.2 Souligner ou barrer un texte dans une table en sortie ODS

juillet 14, 2011

Avec SAS 9.2 il est maintenant possible de souligner/barrer des valeurs d’une table dans une sortie ODS et plus seulement dans le titre.

L’exemple est basé sur une sortie .pdf. TEXTDECORATION=UNDERLINE souligne les valeurs. TEXTDECORATION=LINE-THROUGH barre les valeurs et TEXTDECORATION=OVERLINE (usage très rare a priori) ajoute une ligne au dessus du texte.

ods listing close;
ods pdf file=‘c:/sasref’;
proc print data=sashelp.class;
var name / display style(column)=[textdecoration=underline];
var sex / display style(column)=[textdecoration=line-through];
var age / display style(column)=[textdecoration=overline];
run;
ods pdf close;
ods listing;

Lecture complémentaire

SUGI, pour visualiser le résultat : http://www2.sas.com/proceedings/sugi31/227-31.pdf

h1

Ajouter des liens hypertextes dans vos fichiers PDF

octobre 4, 2009

Dans cet article, je vous propose d’ajouter des liens hypertextes dans vos fichiers .PDF créés avec la syntaxe de l’ODS PDF. Pour illustrer ce sujet, nous créerons une table des matières (table of contents ou TOC) rustique avec ODS PDF TEXT=’ ‘; où il suffira de cliquer sur la section qui vous intéresse pour l’atteindre.

1. Le principe de base

Pour ajouter des liens hypertextes, il faut deux informations :

  • la location du point d’encrage/de destination (anchor)
  • le lien vers ce point d’encrage

ods escapechar=‘^’;

ods listing close;
ods pdf file=‘C:/sasref/hyperlink_toc.pdf’;

ods pdf text=‘Table of Contents’;
ods pdf text= »;
ods pdf text=‘^S={url=’#hommes’}1. Hommes’;
ods pdf text=‘^S={url=’#femmes’}2. Femmes’;

ods pdf anchor=‘hommes’;
ods pdf text=1. Hommes’;
proc print data=sashelp.class(where=(sex=‘M’));
run;

ods pdf anchor=‘femmes’;
ods pdf text=‘2. Femmes’;
proc print data=sashelp.class(where=(sex=‘F’));
run;

ods pdf close;
ods listing;

Le point d’encrage : Le point d’encrage est donné par l’instruction ods pdf anchor=‘…’;. Entre guillemets est donné un nom de votre choix qui servira à l’identifier.

Le lien hypertexte : Le lien vers ce point d’encrage est donné par le mot URL à préciser sous forme de style donné au texte sur lequel cliquer.

ods pdf text=‘^S={url=’#…’}Je clique ici’;

Définition d’un style : Le style est défini avant le texte par S={…}. Pour indiquer à SAS qu’il faille interpréter ce texte comme un style et non un texte brut, un caractère doit précédé le tout. J’ai choisi le symbole du chapeau défini auparavant avec l’instruction ods escapechar=‘^’;

2. Personnaliser le style

Supprimer l’affichage du bookmark : Dans la version enrichie qui suit, j’ai choisi l’option NOTOC pour éviter l’affichage du bookmark sur la gauche de l’écran propre aux fichier PDF.

Les sauts de pages à la demande: J’ai aussi choisi d’enlever par défaut tous les sauts de pages ods pdf startpage=never; puis d’ajouter une fois un saut de page entre la table des matières et les tableaux avec ods pdf startpage=now;

Les en-têtes en moins : Le titre par défaut, la date et le numéro des pages sont enlevés :

title;
options nodate nonumber;

Les liens hypertextes invisibles : Par défaut, le lien hypertexte est présenté par un cadre bleu autour du texte à cliquer. Pour enlever ce cadre, travaillez le style avec ACTIVELINKCOLOR, VISITEDLINKCOLOR et LINKCOLOR.

ods pdf text=« ^S={activelinkcolor=white
visitedlinkcolor=white
linkcolor=white
url=’…’}… »
;

D’autres styles permettent ici d’affiner la présentation :

  • VJUST : ajustement vertical du texte
  • CELLHEIGHT : hauteur de la case contenant le texte
  • CELLWIDTH : largeur de la case contenant le texte
  • FONT_FACE : la police de style
  • FONT_SIZE : la taille du texte
  • INDENT : l’indentation du texte
  • FONT_WEIGHT : mise en gras du texte

J’ai choisi de sauvegarder ces informations dans des macros variables pour pouvoir centraliser l’information en début de programme.

3. Le résultat

Deux pages sont donc créées. La première contient la table des matières. Vous pouvez cliquer sur le texte 1. Hommes ou 2. Femmes pour rejoindre le tableau qui vous intéresse.

hyperlink_toc

hyperlink_main

Annexe : l’intégralité du code

%let titl=vjust=middle
cellheight=30pt
cellwidth=17cm
font_face=arial
activelinkcolor=white
visitedlinkcolor=white
linkcolor=white;
%let titl1=&titl indent=5cm font_size=16pt font_weight=bold;
%let titl2=&titl indent=6cm font_size=12pt;

title;
options nonumber nodate;
ods escapechar=’^’;

ods listing close;
ods pdf file=‘C:/sasref/hyperlink_toc.pdf’ notoc startpage=never;

ods pdf text=« ^S={&titl1.}Table of Contents »;
ods pdf text= »;
ods pdf text=« ^S={&titl2. url=’#hommes’}1. Hommes »;
ods pdf text=« ^S={&titl2. url=’#femmes’}2. Femmes »;

ods pdf startpage=now;

ods pdf anchor=‘hommes’;
ods pdf text=« ^S={&titl2.}1. Hommes »;
proc print data=sashelp.class(where=(sex=‘M’));
run;

ods pdf anchor=‘femmes’;
ods pdf text=« ^S={&titl2.}2. Femmes »;
proc print data=sashelp.class(where=(sex=‘F’));
run;

ods pdf close;
ods listing;

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

 

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

Des marges personnalisées pour vos rapports RTF

juin 30, 2008

Les documents lus par Word peuvent être sauvegardés au format RTF. SAS crée ce type de document en encadrant les tableaux et graphiques de la syntaxe ODS RTF (Output Delivery System). Par défaut, les marges sont de 0,63 cm (soit 0.25 inches) pour chacun des quatre côtés. Pour les changer, il faut procéder en 3 étapes : définir un template, changer les valeurs des marges et appeler le template.

1. Le coin des curieux

Un template est en programmation SAS ce qu’un patron est en couture. Il permet de définir l’apparence générale du travail final. Un template est défini en SAS avec la procédure PROC TEMPLATE. Pour distinguer les patrons pour les pantalons de ceux pour les chemisiers, des noms sont donnés à ces patrons. En SAS, ces noms sont appelés de STYLES.

Avec l’instruction LIST STYLES, vous affichez la liste des styles actuellement disponibles dans la fenêtre OUTPUT. Vous verrez notamment STYLES.RTF.

proc template;
   list styles;
run;

Pour voir le contenu de ce style dans la fenêtre LOG, il faut citer son nom dans l’instruction SOURCE.

proc template;
   source styles.rtf;
run;

Vous pourrez notamment repérer dans la LOG la partie sur les marges :

replace Body from Document
   « Controls the Body file. » /
   bottommargin = 0.25in
   topmargin = 0.25in
   rightmargin = 0.25in
   leftmargin = 0.25in;

2. Les trois étapes de base

2.1 Définir un template où les marges ne sont pas définies

Dans cet exemple, le nouveau template s’appelle STYLES.SASREF_RTF. Il est défini à partir du style STYLES.RTF. Les marges sont définies dans BODY FROM DOCUMENT. Une valeur non définie est assignée aux marges grâce au mot _UNDEF_ (undefined). Pour terminer la définition du template, une instruction END est ajoutée.

proc template;
   define style styles.sasref_rtf;
      parent = styles.rtf;
      replace body from document /
          bottommargin = _undef_
          topmargin = _undef_
          rightmargin = _undef_
          leftmargin = _undef_;
   end;
run;

L’ODS LISTING permet de désactiver la sortie vers la fenêtre OUTPUT dans un premier temps puis de la réactiver. Le mot-clé OUTPUT étant déjà pris au moment de la création de l’instruction ODS LISTING, SAS a choisi le mot-clé LISTING pour désigner la fenêtre OUTPUT.

2.2 Changer les mesures avec l’instruction OPTIONS

A présent, il est possible de modifier les marges avec l’instruction OPTIONS.

options bottommargin = 1.5 cm
        topmargin    = 1.5 cm
        rightmargin  = 2 cm
        leftmargin   = 2.5 cm;

2.3 Appeler le template nouvellement créé

Une option STYLE= est ajoutée à l’instruction ODS RTF. Le nom du template nouvellement créé y est assigné.

ods listing close;
ods rtf file  = ‘C:/sasref/margin_eg.rtf’
        style = styles.sasref_rtf;
   proc print data=sashelp.class;
   run;
ods rtf close;
ods listing;

3. Etape de nettoyage

Pour terminer, si le template n’est pas amené à être réutilisé, l’instruction DELETE permettra de le supprimer.

proc template;
   delete styles.sasref_rtf;
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.