Output
Delivery System - SAS/BASE®
QUESTIONS
QUESTIONS GENERALES
- Lorsque j'utilise une intruction ODS, je reçois le message suivant :
WARNING: no output destinations active. Quelle en est la raison ? Réponse
- Où trouver plus de FAQ pour personnaliser ses sorties ? Réponse
- Comment connaître le nom des objets (tables) générés dans la fenêtre OUTPUT ? Réponse
- Comment choisir les tables qui seront affichées dans la fenêtre output ? Réponse
ODS LISTING
- Comment créer un fichier texte à partir d'une table SAS et y intégrer
des titres et footnotes ? Réponse
ODS HTML
- Comment changer le titre figurant dans la bannière d'un navigateur,
d'un fichier HTML créé avec l'ODS ? Réponse
- Comment remplacer, dans une table des matières, "The Print Procedure"
par un texte personnalisé ? Réponse
- Comment faire pour insérer un logo lorsqu'on crée des fichiers HTML
à partir de l'ODS HTML ? Réponse
- Comment supprimer les sauts de page dans un document HTML ? Réponse
- Comment supprimer l'encadré d'un titre dans une page HTML ? ( Il est
visible quand la couleur de fond du titre est différente de celle de la
page HTML). Réponse
- Dans Enterprise Guide, il existe une interface pour créer ses propres
styles. Est-il possible d'appliquer ces styles dans SAS ? Réponse
- Dans les préférences (TOOLS -> OPTIONS -> PREFERENCES), au niveau de
la restitution des résultats (onglet Results), dans la partie HTML, il
est possible de spécifier qu'un fichier HTML soit créé par défaut pour
chaque sortie. Le style qui sera appliqué au document HTML peut également
être choisi. Dans la liste déroulante, on ne voit que les styles proposés
par SAS. Est-il possible d'ajouter à cette liste les styles définis par
l'utilisateur ? Réponse
- Comment mettre en place un formatage conditionnel dans un tableau ? Réponse
- Lors de l’impression de documents HTML contenant des sauts de
page, une ligne horizontale est présente en début de chaque
page. Comment la supprimer ? Réponse
- Lors de la création d’une table des matières, avec
l’ODS HTML, comment procéder pour que les références
aux fichiers HTML soient exprimées de façon relative ? Réponse
- Comment faire pour définir l'emplacement des graphiques au format
gif générés en ODS HTML ? Réponse
- Entre la version 8.2 du Système SAS et SAS 9, il se peut que
les sorties HTML diffèrent en raison d’un code HTML généré
différent. Comment faire pour retrouver le code HTML de la version
8.2 du Système SAS avec SAS9 ? Réponse
- Comment inclure le code d’un fichier CSS dans un fichier HTML
? Réponse
ODS RTF
- Pourquoi les couleurs que j'ai utilisées dans SAS ne sont pas restituées
correctement dans Word ? Réponse
- Comment changer la taille des marges de documents RTF créés à partir
de l'Output Delivery System (ODS) ? Réponse
- Comment créer de vrais tableaux Word ? Réponse
- Comment gérer les sauts de page dans les documents RTF créés à partir
de l'ODS RTF ? Réponse
- Par défaut, lorsqu'on utilise l'ODS RTF, les titres (instruction TITLE)
et notes de bas de page (instruction FOOTNOTE) se retrouvent dans les
zones en-têtes et pieds de page de Word. Est-il possible de les avoir
dans le corps du document Word ? Réponse
- Comment créer un document RTF en mode paysage ? Réponse
- Comment souligner une partie d’un titre en sortie RTF? Réponse
- En SAS®9, lorsque les sauts de page ont été supprimés
(option startpage positionnée à no), comment spécifier
le nombre de lignes blanches entre les résultats des procédures
? Réponse
- Comment créer un document RTF contenant à la fois des pages orientées en paysage et en portrait ? Réponse
- Pourquoi des caractères insolites peuvent-ils apparaître dans la première colonne d’une sortie au format RTF ? Réponse nouveau
ODS PDF
Comment avoir des numéros de page personnalisés dans les
sorties pdf ? Réponse
SOLUTIONS
Lorsque j'utilise une intruction
ODS, je reçois le message suivant : WARNING: no output destinations
active.
Quelle en est la raison?
Par défaut, la destination ODS LISTING est toujours ouverte. Si vous
la fermez (syntaxe : ODS LISTING CLOSE) et que vous exécutez une procédure,
sans avoir précisé une nouvelle destination de sortie, vous recevrez
alors le message ci-dessus puisque aucune destination n'est alors active.
Pour résoudre le problème, soumettez simplement
l'instruction :
ODS LISTING ;
Ou tout autre destination ODS possible (RTF, PDF, PRINTER, HTML, etc.).

Où trouver plus de FAQ pour personnaliser
ses sorties ?
Sur notre site américain, vous trouverez des FAQ en Anglais utilisant la
procédure TEMPLATE : http://support.sas.com


Comment connaître le nom des objets (tables) générés dans la fenêtre OUTPUT?
Afin de connaître le nom des objets générés par les procédures, vous pouvez utiliser les commandes ODS TRACE ON/OFF, comme suivant :
ODS TRACE ON;
Proc reg data=sashelp.class;
model weight=height age;
Run;
quit;
ODS TRACE OFF;
Le nom de chaque objet s’affiche dans la fenêtre LOG, comme suivant :
Output Added:
-------------
Name: NObs
Label: Number of Observations
Template: Stat.Reg.NObs
Path: Reg.MODEL1.Fit.Weight.NObs
-------------
Output Added:
-------------
Name: ANOVA
Label: Analysis of Variance
Template: Stat.REG.ANOVA
Path: Reg.MODEL1.Fit.Weight.ANOVA
-------------
Output Added:
-------------
Name: FitStatistics
Label: Fit Statistics
Template: Stat.REG.FitStatistics
Path: Reg.MODEL1.Fit.Weight.FitStatistics
-------------
Output Added:
-------------
Name: ParameterEstimates
Label: Parameter Estimates
Template: Stat.REG.ParameterEstimates
Path: Reg.MODEL1.Fit.Weight.ParameterEstimates
-------------

Comment choisir les tables qui seront affichées dans la fenêtre output?
Utiliser les commandes ODS SELECT ou ODS EXCLUDE.
- ODS SELECT <nomobjet1> <nomobjet2> : permet de sélectionner les objets que l’on souhaite garder
- ODS EXCLUDE <nomobjet1> <nomobjet2> : permet d’exclure des objets de l’output
Exemple : On souhaite afficher dans l’output d’une procédure REG, seulement l’estimation des paramètres.
ODS SELECT ParameterEstimates ;
Proc reg data=sashelp.class;
model weight=height age;
Run;
quit;

Comment créer un fichier texte à partir d'une table
SAS et y intégrer des titres et footnotes ?
L'astuce consiste à utiliser les options ODS et FOOTNOTE dans une instruction
file print.
Un petit exemple :
/* Redirection de la sortie dans un fichier texte */
ods listing file='c:\temp\test.txt';
/* l'option variables= permet de choisir les noms des variables de votre table
SAS */
data _null_;
set sashelp.class;
file print ods=(variables=(name age)) footnote;
put _ods_;
title 'mon titre';
footnote 'mon footnote';
run;
/* Fermeture */
ods listing close;
/* Pour que les résultats soient à nouveau affichés dans la fenêtre Output
*/
ods listing;

Comment changer le titre figurant dans
la bannière d'un navigateur, d'un fichier HTML créé avec l'ODS ?
Avec l'option title = dans l'instruction ODS HTML.
Exemple :
ods html file='d:\temp\toto.html'(title="My Title");

Comment remplacer, dans une table
des matières, "The Print Procedure" par un texte personnalisé ?
Avec l'instruction ODS proclabel.
Exemple :
ods html contents='d:\temp\contents.html'
body='d:\temp\body.html'
frame='d:\temp\frame.html';
ods proclabel "La procédure d'impression";
proc print data=sashelp.class;
run;
ods html close;
Autre impact de cette instruction ODS proclabel : ce texte
est affiché dans la fenêtre Results.

 |
Comment faire pour insérer un logo lorsqu'on crée des
fichiers HTML à partir de l'ODS HTML ?
La procédure TEMPLATE permet de définir des styles. Vous pourrez ensuite
appliquer ces styles à vos documents HTML.
Voici un exemple simple. Il crée le style styles.test et hérite du style
DEFAULT, c'est-à-dire que vous conservez toute la définition de ce style,
vous ajoutez simplement une image en haut, à droite de votre fichier HTML.
proc template;
define style styles.test;
parent=styles.default;
style body from document /
prehtml="<table width=100%><td align=right><img src=""c:\images\img1.jpg""></table>";
end;
run;
Ensuite, pour l'utiliser, vous ajoutez l'option style dans votre
instruction ODS HTML :
ods html file='c:\temp\ods.html' style=styles.test;
/* Votre code SAS */
ods html close ;

 |
Comment supprimer les sauts de page
dans un document HTML ?
En modifiant le style DEFAULT, plus précisément le paramètre pagebreakhtml,
en le positionnant à _UNDEF_.
Voici un exemple de code :
proc template;
define style saut;
parent = styles.default;
style body from body / pagebreakhtml = _UNDEF_;
end;
run;
ods html file='c:\temp\saut.html' style=saut;
proc print data=sashelp.class;run;
proc print data=sashelp.class;run;
proc print data=sashelp.class;run;
ods html close;

 |
Comment supprimer l'encadré d'un titre
dans une page HTML ? ( Il est visible quand la couleur de fond du titre
est différente de celle de la page HTML).
Ce code montre comment changer la couleur de fond de la page (body) et du titre
(systemtitle) :
proc template;
define style newtest;
parent=styles.default;
style body from body / background=blue;
style systemtitle from systemtitle / background=blue;
end;
run;
En appliquant ce style, le titre sera encadré en gris.
Pour supprimer cet encadrement, il faut ajouter cette instruction dans la procédure
Template :
style SysTitleAndFooterContainer from Container /
cellpadding = 0
cellspacing = 0;

 |
Dans Enterprise Guide, il existe une
interface pour créer ses propres styles. Est-il possible d'appliquer ces
styles dans SAS ?
Tout à fait, mais uniquement dans les fichiers HTML. Il faut savoir qu'Enterprise
Guide crée des CSS (Cascade Style Sheet) qu'on peut réutiliser dans une instruction
ODS HTML.
Voici la syntaxe pour les utiliser dans SAS :
ODS HTML file='c:\temp\test.html' stylesheet=(url="c:\program
Files\SAS Institute\Enterprise Guide\Styles\montest.css");
proc print data=sashelp.class;
run;
ODS HTML CLOSE;

 |
Dans les préférences (TOOLS -> OPTIONS -> PREFERENCES),
au niveau de la restitution des résultats (onglet Results), dans la partie
HTML, il est possible de spécifier qu'un fichier HTML soit créé par défaut
pour chaque sortie. Le style qui sera appliqué au document HTML peut également être
choisi.
Dans la liste déroulante, on ne voit que les styles proposés par SAS. Est-il
possible d'ajouter à cette liste les styles définis par l'utilisateur ?
Pour ce faire, vous devez appliquer les étapes suivantes :
1- Vous définissez votre style avec la procédure Template et vous le stockez
dans la sashelp
(avec l'option store, cf exemple ci-dessous) :
define style Styles.amoi / store = SASHELP.TMPLMST;
2- Vous tapez REGEDIT en ligne de commandes.
- Dans la fenêtre Registry Editor, vous cliquez sur ODS, PREFERENCES et STYLES
- Dans les menus, vous cliquez sur Edit -> New -> Key
- Dans la fenêtre Edit Key Name, vous tapez le nom de votre style (amoi dans
cet exemple)
3- Vous verrez désormais le style amoi dans la liste déroulante où sont
présents les styles SAS.

 |
Comment mettre en place un formatage conditionnel
dans un tableau ?
Avec la procédure REPORT, dans un bloc compute, comme le montre cet
exemple :
data test;
input valeur annee;
/*
seule la 2ème observation est marquée (flag=1), le but est d’afficher 49 en
rouge et laisser les deux autres valeurs en noir */
if valeur < 50 then flag=1;
cards;
100 1960
49 1961
62 1962
;
run;
ods html body='c:\temp\body.html' style=statdoc;
proc report data=test nowd;
column annee flag valeur ;
define flag / display noprint;
define valeur / sum;
define annee / display;
compute valeur;
if flag=1 then
call define(_col_, "style", "style=[foreground=red]");
endcomp;
run;
ods html close;

Lors de l’impression de documents
HTML contenant des sauts de page, une ligne horizontale est présente
en début de chaque page.
Comment la supprimer ?
L’astuce consiste à modifier la définition du saut de
page dans le style utilisé par l’ODS HTML. Dans le style default
et les styles hérités de ce dernier, il est défini comme
suit :
'PageBreakLine' = %nrstr("<p style=""page-break-after: always;""> </p><HR
size=3>" )
Il faut créer un nouveau style, héritant de celui qui vous intéresse
et y redéfinir le saut de page ainsi :
'PageBreakLine' = %nrstr("<p style=""page-break-after: always;""> </p>" ), à savoir
sans <HR size=3>.
Exemple de procédure template :
proc template;
define style styles.saut;
parent=styles.default;
replace html /
'expandAll'
= "<SPAN onClick=""if(msie4==1)expandAll()"">"
'posthtml
flyover line' = "</SPAN><HR size=3>"
'prehtml
flyover line' = "<SPAN><HR size=3>"
'prehtml
flyover bullet' = %nrstr("<SPAN><b>·</b>")
'posthtml
flyover' = "</SPAN>"
'prehtml
flyover' = "<SPAN>"
'break'
= "<br>"
'Line'
= "<HR size=3>"
'PageBreakLine'
= %nrstr("<p style=""page-break-after: always;""> </p>")
'fake
bullet' = %nrstr("<b>·</b>");
end;
run;

Lors de la création d’une
table des matières, avec l’ODS HTML, comment procéder
pour que les références aux fichiers HTML soient exprimées
de façon relative ?
L'option url=none de l'instruction path permet de stocker les chemins
relatifs.
Voici un exemple :
ods html path='c:\mon_web'(url=none)
frame='frame.html'
contents='contents.html'
body='res.html' ;
proc print data=sashelp.class;
run;
ods html close;
L’option path= permet de donner le répertoire où
devront être créés tous les fichiers (body, frame,
contents, page, etc).
Pour le vérifier, il suffit d’éditer le fichier contents.html.
Sans l’option url=none, le chemin absolu est stocké :
<
A HREF="c:\mon_web\res.html#IDX" TARGET="body">
Avec l’option url=none, c’est le chemin relatif qui est stocké
:
< A HREF="res.html#IDX" TARGET="body">

Comment faire pour définir
l'emplacement des graphiques au format gif générés
en ODS HTML ?
Avec l'option GPATH= dans l’instruction ODS HTML.

Entre la version 8.2 du Système
SAS et SAS 9, il se peut que les sorties HTML diffèrent en raison
d’un code HTML généré différent.
Comment faire pour retrouver le code HTML de la version 8.2 du Système
SAS avec SAS9 ?
Pour obtenir du code HTML généré identique à la
version précédente, 2 solutions sont possibles :
Dans vos
programmes, remplacer les instructions ODS HTML et ODS HTML
CLOSE par ODS HTML3 et ODS HTML3 CLOSE, comme le montre l’exemple
suivant :
ods html3 file="temp.html";
proc print data=sashelp.class;
run;
ods html3 close;
Modifier la base des registres SAS :
• saisir REGEDIT dans la ligne de commande
• se positionner sur l’item ODS
• modifier la valeur de "Default HTML version" de
HTML4 en HTML3

Comment inclure le code d’un fichier CSS dans un fichier HTML?
Par défaut, un fichier CSS n’est pas intégré dans le fichier HTML mais une balise <link> pointe sur le fichier CSS. Vous devez donc avoir accès au fichier CSS pour que la feuille de style soit appliquée.
Pour une utilisation autonome du fichier HTML avec les personnalisations d’intégrées, vous pouvez inclure le code du CSS directement dans le fichier HTML.
La solution consiste à lire le fichier CSS via une étape data _null_.
Vous trouverez ci-dessous un exemple de code où le fichier CSS est lu entre les balises <head> et </head>. L’option NOTOP est positionnée lors de l’instruction ODS HTML pour éviter que de telles balises soient recréées :
filename temp 'c:\temp\add_css.html' mod;
data _null_;
infile 'c:\temp\mon_style.css' truncover end=last;
input;
file temp;
if _n_= 1 then do;
put '<html>';
put '<head>';
put '<style type="text/css">';
end;
put _infile_;
if last then do;
put '</head>';
put '</style>';
put '<BODY class="Body" style=" Text-align:CENTER;">';
end;
run;
ods html file=temp(notop) stylesheet;
proc print data=sashelp.class;
run;
proc print data=sashelp.class;
run;
ods html close;
filename temp clear;
Vous devez faire attention au fait que l’intégration du fichier CSS directement dans le code HTML va augmenter la taille du fichier HTML généré.

Pourquoi les couleurs que j'ai utilisées dans SAS
ne sont pas restituées correctement dans Word ?
Word ne supporte que 16 couleurs. Donc si le document RTF créé à partir de
SAS contient une couleur autre, Word utilise une technique de " Dithering " qui
consiste à faire un mélange de points de couleurs différentes pour élaborer
des couleurs intermédiaires.

 |
Comment changer la taille des marges
de documents RTF créés à partir de l'Output Delivery System (ODS)?
L'astuce consiste à modifier le style par défaut, et plus particulièrement
la valeur des options leftmargin, rightmargin, topmargin et bottommargin.
Voyons sur l'exemple ci-dessous.
*-- Création d'un fichier RTF "classique" -- ;
*-- Le style rtf est utilisé par défaut, même sans l'option style=styles.rtf
-- ;
ods rtf file='c:\temp\style_normal.rtf' style=styles.rtf;
proc print data=sashelp.table;
run;
ods rtf close;
*-- Création d'un nouveau style héritant du style
RTF --;
*-- Modification des marges --;
Proc template;
define style Styles.RtfMarge;
parent = styles.rtf;
replace Body from Document /
leftmargin = 3cm
rightmargin = 3cm
topmargin = 1.2cm
bottommargin = 1.2cm;
end;
run;
*-- Création d'un fichier RTF utilisant ce nouveau
style -- ;
ods rtf file='c:\temp\style_modifie.rtf' style=styles.rtfmarge;
proc print data=sashelp.table;
run;
ods rtf close;

 |
Comment créer de vrais tableaux Word
?
A partir de la version 8.1 du Système SAS, nous avons ajouté aux formats déjà disponibles
dans l'ODS la destination RTF.
Exemple de syntaxe :
ods rtf file='c:\temp\resultat.rtf';
proc univariate data=sashelp.class;
var age;
run;
ods rtf close;

Comment gérer les sauts de page dans
les documents RTF créés à partir de l'ODS RTF ?
Cette fonctionnalité est disponible à partir de la version 8.2.
L'option STARTPAGE=, à positionner dans ODS RTF, supprime les sauts de page
(insérés par défaut), entre les sorties de procédures distinctes, quand elle
sera positionnée à OFF ou NO.

Par défaut, lorsqu'on utilise l'ODS
RTF, les titres (instruction TITLE) et notes de bas de page (instruction
FOOTNOTE) se retrouvent dans les zones en-têtes et pieds de page de Word.
Est-il possible de les avoir dans le corps du document Word ?
Cette fonctionnalité est disponible à partir de la version 8.2, à travers une
nouvelle option : Bodytitle.
Elle doit être ajoutée dans votre instruction ODS RTF, sachant que le comportement
décrit sera toujours celui par défaut.

Comment créer un document RTF en mode
paysage ?
Avant votre instruction ODS RTF, ajoutez la ligne suivante :
option orientation=landscape;

Comment souligner une partie d’un titre en sortie RTF ?
Utiliser la syntaxe suivante :
ods escapechar="^";
ods rtf file="file.rtf";
proc print data=sashelp.class;
title "^S={protectspecialchars=off} Ceci est {\ul souligné} {et ceci ne l'est pas}";
run;
ods rtf close;

En SAS®9, lorsque les sauts de
page ont été supprimés (option startpage positionnée à no), comment spécifier
le nombre de lignes blanches entre les résultats des procédures ?
Avec l’option text de l’instruction ODS RTF.
Le code ci-dessous va ajouter 20 lignes entre les résultats des
procédures print :
ods escapechar="^";
ods rtf file="c:\temp\test.rtf"
startpage=no;
proc print data=sashelp.class(obs=2);
run;
ods rtf text="^20n";
proc print data=sashelp.class(obs=2);
run;
ods rtf close;

Comment créer un document RTF contenant à la fois des pages orientées en paysage et en portrait ?
Réponse :
Le programme ci-dessous permet l'utilisation de l'orientation portrait et paysage dans un même document RTF. L’astuce consiste à utiliser l’option ORIENTATION entre chaque procédure et à répéter l’instruction ODS RTF :
options orientation = portrait;
ods rtf file = 'c:\temp\montest.rtf';
proc print data = sashelp.class;
run;
options orientation = landscape;
ods rtf;
proc print data = sashelp.class;
run;
ods rtf close;

Pourquoi des caractères insolites peuvent-ils apparaître dans la première colonne d’une sortie au format RTF ?
Réponse :
Des caractères insolites peuvent apparaître dans la première colonne d’une sortie au format RTF, en raison de l’activation du bouton P inversé (¶).
Pour les faire disparaître, il faut :
- Soit désélectionner le bouton P inversé (¶, aussi appelé bouton ‘Afficher/Masquer’ sous Microsoft Word) qui permet l’affichage des marques de paragraphe et autres symboles de mise en forme masqués.
- Soit exécuter le programme avec l’option NOTOC_DATA au niveau de l’instruction ODS RTF :
ods rtf file='c:\temp\sp2.rtf' NOTOC_DATA;
proc print data=sashelp.class;
run;
ods rtf close;
Cette option est disponible à partir du service pack 2 pour SAS 9.1.3.
La SAS Note suivante référence ce comportement :
http://support.sas.com/techsup/unotes/SN/010/010379.html
Comment avoir des numéros de page personnalisés dans
les sorties pdf ?
A partir de SAS 9.1, l’utilisation de l’ods escapechar associé aux
fonctions {thispage} et {lastpage}, vous permet de personnaliser l’affichage
des numéros de page dans vos sorties PDF.
Exemple de code :
ods listing close;
ods escapechar='^';
ods pdf file='c:\test.pdf';
title 'Page ^{thispage} sur ^{lastpage}';
proc print data=sashelp.class;
run;
proc print data=sashelp.air;
run;
ods listing;
ods pdf close;
Cette nouveauté de SAS 9.1 est également valable pour vos sorties
RTF.

|