Posts Tagged ‘rtf’

h1

Répéter la valeur d’une variable sur chaque page avec ODS RTF

septembre 26, 2010

Il y a un peu plus d’un mois, je vous parlais de l’option SPANROWS de PROC REPORT pour pouvoir répéter une valeur groupée sur chaque page du listing.

Mais si vous devez créer un fichier .RTF et non un fichier .PDF ou si vous n’avez pas SAS 9.2, vous pouvez vous rabattre sur cette solution.

Elle présente le seul inconvénient de séparer la table en table distincte à chaque nouvelle valeur du la variable groupée.

Voici donc un exemple à tester par vous même.

1. Le setting

Par simple soucis de présentation, quelques instructions de paramétrage sont données.

  • Enlever le titre par défaut avec l’instruction TITLE.
  • Enlever la date et le numéro de page par défaut et alignez le résultat à gauche.
  • Créer un format caractère SEX où M réfère à Garçon et F à Fille.


*——————————————–;
* Setting;
*——————————————–;

title;
options nodate nonumber nocenter;

proc format;
value $ sex ‘M’=‘Garçon’
‘F’=‘Fille’;
run;

2. Préparation des données

Afin d’avoir assez de données le fichier CLASS est multiplié par 5. Les noms sauvegardés dans la variable NAME sont incrémentés d’un nombre.

*——————————————–;
* 2. Data Preparation;
*——————————————–;

data class;
set sashelp.class;
output;
name=cats(name,’1′);
output;
name=cats(name,’2′);
output;
name=cats(name,’3′);
output;
name=cats(name,’4′);
output;
name=cats(name,’5′);
output;
run;

3. Reporting;

Vos données doivent être triées afin d’utiliser l’instruction BY dans PROC REPORT.

L’option d’ODS RTF STARTPAGE=NEVER empêchera le passage à une nouvelle feuille à chaque nouvelle valeur de la variable SEX.

Au moyen des options COMPUTE/ENDCOMP, il est possible de personnaliser le texte en début de chaque page. Un texte aligné à gauche est ajouté. Une ligne avant et une ligne après sont ajoutées pour faciliter la lisibilité du rapport. Ce texte est composé de « SEXE :  » suivi de la valeur formatée de la variable SEX.

*——————————————–;
* 3. Reporting;
*——————————————–;

proc sort data=class;
by sex;
run;

*options nobyline;

ods rtf file=’C:/…/test1.rtf’ startpage=never;
proc report data=class;
by sex;
column sex name;
define sex  / /*id*/ group noprint ;
define name / display  ‘Nom’;

compute before _page_ /style=[just=left] ;
line ‘ ‘;
line @1 ‘Sexe:’ @6 sex $sex. ;
line ‘ ‘;
endcomp;

run;

ods rtf close;

h1

Passer d’un format A4 à un format LETTRE

mars 1, 2010

Vous voulez imprimer les fichiers RTF générés avec ODS RTF dans une autre forme que le format A4. Quelle option utiliser pour utiliser un autre format standard comme le format LETTRE ? Comment personnaliser la zone d’impression et gérer les marges en conséquences ?

1. Par défaut, le papier est au format A4 (21cm/29,7cm)

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

2. Changer la taille du papier pour l’impression pour une lettre (21,59cm/27,94cm)

options papersize=letter;

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

3. Personnaliser la taille (21cm/27,94cm)

Afin de personnaliser les marges dans l’instruction globale OPTIONS, je choisi ici d’enlever toute valeur au niveau du template (undefine margin). Ensuite ce template TEST_PAPERSIZE est appelé dans l’instruction ODS RTF.

proc template;
Define Style style.test_papersize;
parent=styles.rtf;
style Body from Body /
leftmargin=_undef_
right margin=_undef_
topmargin=_undef_
bottommargin=_undef_;
End;
run;

De la taille du papier, il faut enlever les marges. Ici, nous voulons un papier avec une largeur de 21cm et une hauteur de 27,94cm. Les marges étant de 2 centimètres de chaque côté, on enlève 4 cm à la hauteur et 4 cm à la largeur définie par l’option PAPERSIZE.

Les paramètres de l’option PAPERSIZE :

  1. Le 1er paramètre : la largeur
  2. Le 2ème paramètre : la hauteur

options papersize=(’17cm’,‘23.94cm’) leftmargin=2cm rightmargin=2cm topmargin=2cm bottommargin=2cm;

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

Note : j’ai obtenu le résultat escompté avec Word 2003 mais pas avec Word 2007. Vous pouvez apporter un commentaire avec votre expérience sur le sujet.

h1

Indenter ses titres et pieds-de-page dans un fichier PDF

août 2, 2009

Comment couper ses titres et ajouter des indentations dans un fichier PDF avec SAS ? La solution deux petits mots-clés -2n et m précédés d’un symbole défini par vous-même auparavant.

Notez que cette syntaxe fonctionne aussi pour les pieds-de-page.

Si le passage à la ligne fonction avec ODS RTF, l’indentation par contre n’est pas prise en compte.

1. Par défaut un titre est sur une seule ligne

Dans l’exemple qui suit, un titre est donné dans une instruction TITLE.

Ce titre est aligné à gauche (J=L entendez par là justify=left).

Pour faciliter la lecture du programme, le titre est écrit sur plusieurs lignes. Mais au final, tout le texte apparaît sans passage à la ligne.

ods listing close;
title j=l
‘SASHELP.CLASS:’
‘Première Variable: Nom’
‘Seconde Variable: Sex’
‘Troisième Variable: Age’;
ods pdf file=‘C:/sasref/indent_title.pdf’;
proc print data=sashelp.class noobs;
run;
ods pdf close;
ods listing;

title_01_default

2. Passer à la ligne avec ODS ESCAPECHAR et ^-2n

A présent, un passage à la ligne est créé avec le mot -2n.

Pour que SAS n’utilise par ce mot comme un texte devant apparaître dans le titre, ce mot est précédent d’un symbole de son choix (ici un chapeau) défini précédemment avec l’instruction ODS ESCAPECHAR.

ods escapechar=‘^’;
ods listing close;
title j=l
‘SASHELP.CLASS:’
‘^-2nPremière Variable: Nom’
^-2nSeconde Variable: Sex’
^-2nTroisième Variable: Age’;
ods pdf file=‘C:/sasref/indent_title.pdf’;
proc print data=sashelp.class noobs;
run;
ods pdf close;
ods listing;

title_02_linebreak

3. Passer à la ligne et indenter le titre avec ODS ESCAPECHAR, ^-2n et ^m

A présent, l’encre ^m est ajoutée en4ème position dans la première ligne. Cela veut dire que tout le texte qui suit est indenté et débutera en position 4 sous la lettre H de SASHELP.CLASS.

ods escapechar=‘^’;
ods listing close;
title j=l
‘SAS^mHELP.CLASS:’
‘^-2nPremière Variable: Nom’
^-2nSeconde Variable: Sex’
^-2nTroisième Variable: Age’;
ods pdf file=‘C:/sasref/indent_title.pdf’;
proc print data=sashelp.class noobs;
run;
ods pdf close;
ods listing;

title_03_indent

Lectures complémentaires

h1

Numéroter ses pages avec ODS RTF

janvier 29, 2009

La syntaxe de ODS RTF a pour but de créer des fichiers ayant une extension .rtf lisible par Word notamment. Comment faire apparaître les numéros de pages en haut ou en bas de la page ? Comment faire pour ajouter des titres à vos tableaux par exemple quand les instructions TITLE et FOOTNOTE servent à la numérotation ?

1. Créer un document RTF

Stopper temporairement l’envoi vers la fenêtre OUTPUT : Dans un premier temps, la destination LISTING est désactivée. Elle est réactivée à la fin. En effet, par défaut le résultat d’un PROC PRINT est envoyé dans la fenêtre OUTPUT de SAS, fenêtre communément appelée LISTING en ODS.

Ouvrir et refermer le fichier RTF : la première instruction ODS RTF sert à définir le nom du fichier RTF à créer. Ici le fichier s’appelle NUMEROTATION.RTF et sera sauvegardé dans le répertoire SASREF du disque C. Toutes les impressions qui suivent (les deux PROC PRINT) seront inclues dans le document RTF. La dernière instruction ODS RTF indique la fermeture du fichier RTF. Plus aucune information ne sera ajoutée au fichier jusqu’à nouvel ordre.

Ajouter un en-tête : Une instruction TITLE située juste avant la première instruction ODS RTF ajoute une en-tête composée de deux parties :

  • Le centrage, l’alignement (justification) par défaut : Mon EN-TETE est centrée (center en américain)
  • Aligner à droite (right) : Page X/XX est affichée à droite de la page grâce à l’option qui la précède J. `

Par la suite X/XX seront remplacés par des numéros de page.

En effet par défaut les titres (title) et pieds de page (footnote) ne sont pas affichés dans le corps du document aux extrémités.

ods listing close;
title 'Mon EN-TETE' j=r 'Page x/xx';
ods rtf file='C:/sasref/numerotation.rtf';
proc print data=sashelp.class;
run;
proc print data=sashelp.class;
run;
ods rtf close;
ods listing;

2. Ajouter des numéros de page

A présent, deux petits ajouts sont fait.

Définir un symbole avec ODS ESCAPECHAR : Le symbole ^ servira de caractère pour introduire des mots-clés, comme l’indique l’instruction ODS ESCAPECHAR. Vous pouvez choisir le symbole de votre choix. La seule règle à respecter est de prendre un symbole qui n’a pas besoin d’être affiché dans le titre.

Afficher la page actuelle et le nombre total de page avec THISPAGE et LASTPAGE : dans l’instruction TITLE, les mots-clés THISPAGE et LASTPAGE doivent être englobés dans des accolades précédé de notre symbole ^ précédemment défini. SAS se chargera alors de les mettre à jour pour chaque page de votre document RTF.

Entre les deux numéros, la barre inclinée (slash) délimite le numéro de la page actuelle de celui de la dernière page. Vous être bien sûr libre d’ajouter le texte de votre choix entre les deux. De même, vous n´êtes pas obligé de faire précédé la numérotation du mot PAGE.

ods listing close;
ods escapechar='^';
title 'Mon EN-TETE' j=r 'Page ^{thispage}/^{lastpage}';
ods rtf file='C:/sasref/numerotation.rtf';
proc print data=sashelp.class;
run;
proc print data=sashelp.class;
run;
ods rtf close;
ods listing;

3. Ajouter des titres à mes différents tableaux

ODS RTF TEXT= : Maintenant que les options TITLE et FOOTNOTES servent pour les en-tête et pied de page, il faut trouver une alternative pour ajouter des titres à vos tableaux et graphiques. L’ODS RTF TEXT= se charge du travail.

La base, un exemple avec le titre du premier tableau : dans le premier exemple, on voit que l’instruction ODS RTF TEXT= contient entre guillemets ^S= suivi de deux accolades. De nouveau le symbole ^ est celui défini dans ODS ESCAPECHAR.

  • La première accolade contiendra des informations de mise en forme du texte.
  • La seconde accolade contiendra le titre.

Quelques options pour améliorer la mise en forme, un exemple avec le second titre : dans le second cas, on précise que

  • Le texte est à centrer horizontalement (JUST=C) et verticalement (VJUST=C).
  • Le texte sera afficher dans un emplacement de 3 cm de haut (OUTPUTHEIGHT=3cm) et cet emplacement prendra la totalité de la largeur de la page (OUTPUTWIDTH=100%).
  • Enfin le texte aura une taille de 18pt (FONT_SIZE=18pt).
ods listing close;
ods escapechar='^';
title 'Mon EN-TETE' j=r 'Page ^{thispage}/^{lastpage}';
ods rtf file='C:/sasref/numerotation.rtf';
proc print data=sashelp.class;
run;
ods rtf text='^S={}{Tableau 1}';
proc print data=sashelp.class;
run;
ods rtf text='^S={just=c vjust=c outputheight=3cm outputwidth=100% font_size=18pt}{Tableau 2}';
ods rtf close;
ods listing;

Poursuivre votre lecture : Trois articles sur l’ODS RTF

h1

Un texte de 32 767 caractères passé au crible

septembre 1, 2008

La quantité d’espace alloué pour une observation dans un data set SAS peut aller jusqu’à 32 767 octets (byte en anglais). Pour m’amuser, j’ai voulu tester. Pour ce faire, j’ai procédé en trois étapes :

  • J’ai créé une variable de 32 767 caractères et j’ai imprimé sa seule valeur dans un fichier .TXT.
  • Puis, j’ai voulu voir comment se déroulait le passage de 32 767 caractères d’un fichier .TXT dans une seule observation d’un data set SAS.
  • Enfin, pour visualiser le tout, j’ai imprimé cette observation dans un fichier .RTF.

Note : La longueur (length) est le mot utilisé en SAS pour parler de la quantité d’espace alloué à une observation. Seules les variables de type caractères (character) peuvent avoir jusqu’à 32 767 octets. Les variables numériques en ont, en effet, 8 au maximum.  Un octet permet de stocker un caractère d’une variable texte. Pour plus de précisions sur l’octet, reportez-vous à l’article « 9 points autour de la notion d’octet« .

Note : La longueur allouée est identique pour toutes les observations d’une même variable. Si la longueur de la variable n’est pas explicitement donné, SAS utilise la longueur de la première observation. Avec un input file, seuls 8 octets sont attribués (SAS Online Doc. : SAS Variable Attributes »). 

data one;
   input x $;
   datalines;
ABC
ABCDEFGHIJKLMN
;
run;

data two;
   x=‘ABC’;
   output;
   x=‘ABCDEFGHIJKLMN’;
   output;
run;

data three;
x=‘ABCDEFGHIJKLMN’;
output;
x=‘ABC’;
output;
run;

Dans le premier exemple, la longueur sera de 8. La seconde observation sera donc coupée.

ABC
ABCDEFGH

Dans le second exemple, la longueur est définie par la première observation. Il s’agit donc d’une longueur de 3. La seconde observation est coupée et ne garde que les trois premiers caractères.

ABC
ABC

Dans le troisème exemple, la longueur est également définie par la première observation. Elle est donc cette fois de 14. Aucune des deux observations n’est coupée.

ABCDEFGHIJKLMN
ABCDEFGHIJKLMN

Cette valeur est changeable. Il s’agit de modifier l’attribut LENGTH d’une variable donnée dans un data step. La valeur est définie soit à l’instruction LENGTH, soit à l’instruction ATTRIB.

1. Imprimer 32 767 caractères dans un fichier .TXT

Dans l’exemple ci-dessous, un fichier .TXT est créé. Il contient 32 767 caractères venant d’une seule et même observation.

Une instruction LENGTH définissant le type et la longueur de la variable : Dans cet exemple, une variable TEST_VAR est créée. Il s’agit d’une variable caractère. Une longueur de 32 767 lui est assignée avec l’instruction LENGTH. Elle pourra donc contenir jusqu’à 32 767 octets par record.

Taper plus de 32 000 caractères, c’est long mais il y a la fonction REPEAT pour nous sauver : La valeur prise par le premier record de la variable TEST_VAR est donnée. J’ai choisi de répéter la lettre a 32 766 fois. Je dis bien 32 766 fois et non 32 765 fois car la fonction REPEAT ajoute à la valeur initiale ‘a’ 32 765 autres ‘a’, soit 32 765 + 1.

Ajouter un dernier caractère à notre valeur : A ces 32 766 lettres ‘a’, j’ai ajouté la lettre ‘b’ en faisant une concaténation grâce aux deux barres verticales. De cette manière, il sera possible de visualiser l’absence de coupure faite par SAS.

filename lgth_max ‘C:/sasref/lgth_max.txt’;
data _null_;
   file lgth_max;
   length test_var $ 32767;
   test_var=repeat(‘a’,32765)||‘b’;
   put test_var;
run;

filename lgth_max clear;

Ecrire le contenu de la variable dans un fichier externe : pour écrire les 32 767 caractères dans un fichier externe, SAS a besoin de trois instructions.

  • Ecrire du texte avec l’instruction PUT : L’instruction PUT est exécutée pour chaque observation de la variable TEST_VAR, c’est-à-dire une fois dans notre cas.
  • Diriger un texte vers une autre destination que la log avec l’instruction FILE : La valeur prise par la variable TEST_VAR est écrite dans un autre fichier. Cet autre fichier est désigné de manière indirecte dans l’instruction FILE. Je dis de manière indirecte car seul un nom figure dans l’instruction FILE, un nom désignant un fichier préalablement défini. On parle de FILEREF.
  • Caractériser un fichier de destination avec l’instruction FILENAME : Le FILEREF désignant la destination du texte à imprimer est défini dans l’instruction FILENAME. A la fin du programme, ce nom servant d’intermédiaire est supprimé pour pouvoir resservir et ainsi désigner un autre fichier ou chemin d’accès.

Pas besoin de créer un data set SAS ici : Dans le cas présent, nous avons besoin d’une étape DATA pour exécuter ce code mais nous n’avons pas besoin de créer un data set. Pour épargner la tâche de création d’un data set, le nom _NULL_ remplace le nom d’un data set.

2. Créer un data set SAS

Lire les données contenues dans un fichier externe : Une variable TEST_NEW est créée dans un data set nommé TEST_DS. Elle est de type caractère comme l’indique le symbole dollar ($) présent dans l’instruction INPUT.

Avant d’entrer une valeur dans cette variable, la longueur maximale autorisée est définie dans l’instruction LENGTH. Comme il s’agit d’une variable caractère, il faut ajouter le dollar.

Au lieu de saisir manuellement les valeurs dans le data step en introduisant le mot DATALINES, une instruction INFILE désigne le fichier où sont stockées les données.

data test_ds;
   infile ‘C:/sasref/lgth_max.txt’;
   length test_new $ 32767;
   input test_new $;
run;

Vérifier la valeur prise par l’attribut LENGTH de la variable TEST_NEW :  La procédure PROC CONTENTS donnera un aperçu des caractéristiques des variables du data set TEST. Bref, cette procédure donnera accès aux méta données (metadata ou données sur les données). Cela comprend la longueur allouée à la variable TEST_NEW et le type de la variable (caractère dans ce cas précis).

proc contents data=test_ds;
run;

3. Visualiser le data set dans un fichier .RTF

Seuls les 128 premiers caractères sont imprimables dans la fenêtre OUTPUT. Par contre, vous pouvez envisager d’autres destinations comme un fichier .RTF. Dans l’exemple, on joue avec les instructions ODS (Output Delivery System).

  • D’une part, la redirection vers la fenêtre output est stoppée le temps de l’impression, via les instructions ODS LISTING.
  • D’autre part, les 32 767 caractères sont envoyés dans un fichier .RTF grâce aux instructions ODS RTF.

ods listing close;
ods rtf file=‘C:/sasref/lgth_max.rtf’;
proc print data=test_ds;
run;
ods rtf close;
ods listing;

Pours les curieux : Changez la longueur pour 32 768 et expérimentez en direct les limites de SAS.

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

9 points pour personnaliser ses titres

mars 28, 2008

silhouettes

Ajouter un titre à vos tableaux et graphiques est simple avec l’instruction TITLE. Je vous rappelle la différence entre les guillemets simples et doubles. Je vous parle des méthodes pour aligner vos titres, etc. Vous saurez ensuite comment supprimer vos titres. Pour rendre vos titres un peu plus flexibles, je vous donne un tuyau (l’option NOBYLINE). Pour ce qui est d’un titre de tableau avec ODS RTF, je vous parle de l’option BODYTITLE. Et pour un titre de graphique, on parlera de l’option NOGTITLE. Bonne lecture.

1. Créer un titre : l’instruction globale TITLE permet d’ajouter un titre. Pour cela, on fait suivre le mot-clé du titre entre guillemets.

title ‘Mon titre’;

2. Créer plusieurs titres : SAS autorise jusqu’à 10 lignes servant de titre. Pour les distinguer, un numéro a été ajouté au mot-clé TITLE1-TITLE10. Ainsi TITLE est équivalent de TITLE1.

title1 ‘Mon premier titre’;
title2 ‘Mon second titre’;

title10 ‘Mon dixième titre’;

3. Supprimer un titre : Par défaut, SAS inscrit « The SAS System » comme titre de vos sorties. Pour l’enlever, vous pouvez soit réécrire dessus ou l’enlever définitivement avec une instruction TITLE vide. Notez que pas seulement le premier titre sera supprimé mais l’intégralité des titres définis.

title ;

4. Un titre sur une seule page d’éditeur : votre titre est long et vous avez besoin d’utiliser la barre de défilement horizontale de votre éditeur SAS pour le lire en entier. La solution est de couper votre titre.

title ‘Ma première partie’
      ‘Ma deuxième partie’
;

5. Guillemets simples ou doubles : pour alléger le programme, utilisez de préférence des guillemets simples. Dans certains cas, cependant, vous aurez besoin de guillemets doubles :

  • Résoudre une macro variable
  • Avoir un titre avec des apostrophes

title « Etude : &numero_etude. »;
title « Don’t do it »;

Une autre solution pour traiter les apostrophes est de mettre deux apostrophes simples l’une à coter de l’autre.

title ‘Don »t do it’;

6. Changer l’alignement : votre titre sera par défaut centré. Pour aligner à gauche, vous pouvez suspendre temporairement l’option globale de centrage (options nocenter; /*votre programme*/ options center). Vous pouvez aussi utiliser l’option pour justifier (j=). Celle-ci peut prendre trois valeurs :

  • j=l (left) pour aligner à gauche,
  • j=c (center) pour centrer,
  • j=r (right) pour aligner à droite.

7. Un texte à gauche et un texte à droite : vous pouvez aussi avoir sur une seule ligne plusieurs éléments à positionner : un à gauche, un à droite et un au milieu.

L’ancienne méthode : l’ancienne méthode consiste à assembler le texte de gauche, x blancs, le texte du milieu, y blancs et le texte de droite. Le tout faisant la largeur de la page. Pour cela un petit calcul s’impose.

  • On prend le nombre total de caractères sur la ligne (linesize).
  • La longueur des trois morceaux de texte y est soustraite.
  • Le reste est divisé par deux. Si on a un nombre impair, les deux textes blancs auront un espace de différence.

La nouvelle méthode : avec SAS 8.2 il existait une alternative, temporairement indisponible sous SAS 9.1.3 mais qui devrait redevenir disponible sous SAS 9.2 (cette année !).

title j=l ‘Mon texte de gauche (left)’
      j=c ‘Mon texte du milieu (center)’
      j=r‘Mon texte de droite (right)’;

En fait, l’option ‘justifié’ (j=) est toujours disponible sous SAS 9.1.3 mais seul le dernier est pris en considération par SAS. D’ici là, il ne vous reste plus que l’ancienne méthode.

8. Personnaliser son titre avec la valeur d’une BY variable : l’option globale BYLINE permet d’ajouter automatiquement un titre pour précisez la valeur d’une valeur BY variable. Par exemple, vous construisez un proc report…; by pop;… D’un côté vous avez la forme automatique avec BYLINE (Par Protocol). De l’autre, vous pouvez personnaliser votre titre (Population : Par Protocol).  Pour cela, on désactive l’option avec NOBYLINE (options nobyline;). Puis on utilise #byvar() et ou #byval() dans le titre. Soit on souhaite faire apparaître le nom de la BY variable soir la valeur de la BY variable. Dans le second cas, cette valeur est rendue parlante avec un format.

title ‘Population : #byval(pop)’;proc report …;
  by pop;
  …;
  format pop pop.;
run;

9. ODS RTF : lorsqu’on crée des documents RTF lisibles par Word, il faut pouvoir adapter les options par défaut des titres pour répondre à ses besoins.

Un titre de tableau dans le corps du document : par défaut les titres d’un tableau sont inclus dans les entêtes du document RTF. Pour qu’il fasse partie intégrante du corps du document, on ajoute l’option BODYTITLE.

Un titre de graphique dans le corps du document : par défaut les titres des graphiques sont inclus dans l’image graphique générée par SAS. Pour que cela ne soit plus le cas, on ajoute l’option NOGTITLE dans l’instruction ODS RTF.

h1

Structurer les sauts de page (ODS RTF)

mars 19, 2008

Atomiun, Bruxelles

Par défaut, des sauts de page sont insérés entre les différentes sorties de SAS. Voici deux exemples.

  • Certaines procédures produisent de multiples sorties comme PROC UNIVARIATE.
  • De plus, lorsqu’une instruction BY est utilisée, il y a autant de sorties que de valeurs prises par les BY variables. C’est le cas, d’un PROC FREQ notamment.

Résumé : une ancienne méthode moyennement performante existe pour supprimer les sauts de page. Elle consiste à remplacer le symbole servant de délimiteur par un espace. Grâce à la notation ODS (Output Delivery System), on peut créer rapidement un document RTF lisible par Word et enlever tous les sauts de page ou une partie.

1. L’ancienne méthode : le symbole utilisé pour définir un saut de page en SAS est le trait d’union. Pour que SAS n’interprète pas ce symbole pour un saut de page, on le remplace par un espace avec l’option globale FORMDLIM.

Exemple : pour tester le code suivant, vous pouvez faire un PROC UNIVARIATE sur le jeu de données SASHELP.CLASS et sa variable AGE

  • Remplacer le saut de page par des espaces :

options formdlim=‘ ‘;

  • Restaurer le saut de page :

options formdlim=‘-‘;

Voici deux inconvénients :

  • Des lignes de blancs sont présentes en début de chaque sortie.
  • L’option s’applique sur tout le document à moins de la réinitialiser entre temps

2. Enlever les sauts de page avec ODS RTF : l’ODS RTF permet de créer des documents lisibles par Word.

Enlever touts les sauts : l’option STARTPAGE=NO enlève tous les sauts de page jusqu’à la fin du document, à moins que d’autre instruction ODS RTF soient insérées. La valeur par défaut est STARTPAGE=YES.

ods rtf file=‘C:/vero/sautpage.rtf’ startpage=no;
/*mon proc univariate*/
ods rtf close;

Changer la valeur de STARTPAGE en cours de programme : pour changer le statut de STARTPAGE, on insère une instruction ODS RTF sans redéfinir le nom du fichier. STARTPAGE=NOW n’insèrera qu’un seul saut alors que STARTPAGE=YES insèrera des sauts jusqu’à la fin du document.

Exemple : dans l’exemple qui suit, seul un saut de page entre les sorties de la procédure UNIVARIATE et la procédure FREQ est insérée.

ods rtf file = ‘C:/vero/sautpage.rtf’ startpage=no;
/*mon proc univariate*/
ods rtf startpage=now;
/*ma proc freq*/
ods rtf close;

NOTE 1, résoudre certains problèmes grâce à ODS PRINTER : l’instruction ODS PRINTER est nouvelle dans SAS 9. Si vous rencontrez des difficultés avec vos sauts de pages, je pense notamment à des sauts de pages supplémentaires que vous n’exceptez pas, désactivez les sauts de pages créé par l’ODS PRINTER avec STARTPAGE=NO. Pensez bien à ajouter cette instruction après l’ODS RTF file= et non avant. Vous risquez sinon d’avoir des surprises avec vos images graphiques.

ods printer startpage=no;

NOTE 2, changer l’orientation de la page avec ODS RTF : pour changer l’orientation de la page, on utilise l’option globale ORIENTATION avant l’instruction ODS RTF. Par défaut, c’est PORTRAIT. Pour changer l’orientation au cours du document, on ajoute après une instruction ODS RTF juste après.

options orientation=landscape;
ods rtf file=‘C:/vero/sautpage.rtf’;
/*mon tableau en orientation paysage*/
options orientation=portrait;
ods rtf;
/*mon listing en orientation portrait*/
ods rtf close;

NOTE 3, suspendre la sortie LISTING : quand on utilise ODS RTF, on peut aussi vouloir arrêter d’afficher les sorties dans la fenêtre OUTPUT, nommées LISTING en langage SAS.

ods listing close;
/*ods rtf, …*/
ods listing;