Posts Tagged ‘options’

h1

Afficher toutes les valeurs possibles d’une variable définies dans un format avec PRELOADFMT option (PROC TABULATE)

décembre 2, 2009

Vous pouvez avoir besoin de réaliser un tableau comptant le nombre d’observations par catégories. Deux possibilités s’offrent à vous :
afficher le nombre d’observations parmi les catégories présentent dans vos données ou
afficher le nombre d’observations pour toutes les catégories possibles et imaginables définies dans un format. Les catégories non présentent dans les données ont alors une fréquence de zéro.

Par défaut, seules les catégories présentent dans les données seront retenues par PROC TABULATE.
Voici comment utiliser les options PRELOADFMT ORDER= et PRINTMISS pour prendre en compte tous les valeurs possibles et non seulement celles observées.

1. Préparer les données

Dans un premier temps, un format caractère $SEX est créé. Il prend trois valeurs possibles, M pour les hommes (male), F pour les femmes (female), et pour tout autre caractère, le label sera Missing.

proc format;
value $ sex ‘M’=‘Male’
‘F’=‘Female’
other=‘Missing’;
run;

2. Compter le nombre de garçons et de filles ayant une donnée pour l’âge.

Ici, on note que 10 garçons et 9 filles ont une donnée sur l’âge. Notez que la statistique n se limite aux valeurs non manquantes, sur le même principe que la fonction n. Si un âge est manquant, il ne sera pas inclus avec cette statistique mais avec la statistique nmiss.

proc tabulate data=sashelp.class;
class sex;
var age;
table sex=‘ ‘,age=‘ ‘*n=‘Freq’*f=5.;
format sex $sex.;
run;

A présent ce qui nous intéresse est d’afficher toutes les catégories possibles pour la variable SEX, comme définies dans le format $SEX.

Dans l’instruction CLASS, il faudra ajouter l’option /PRELOADFMT order=data.
Tandis que dans l’instruction TABLE, il faudra noter l’option PRINTMISS.

A la place de ORDER=DATA, vous pouvez mettre ORDER=FORMATTED, ORDER=UNFORMATTED ou encore ORDER=FREQ.

proc tabulate data=sashelp.class;
class sex/preloadfmt order=data;
var age;
table sex=‘ ‘,age=‘ ‘*n=‘Freq’*f=5./printmiss;
format sex $sex.;
run;

3. Calculer l’âge moyen des garçons et des filles

L’âge sera calculer en se servant des valeurs non manquantes.

L’âge moyen sera manquant (représenté par un point) pour les catégories de SEX où aucun âge n’est disponible. Vous pouvez remplacer ce point par un zéro via l’instruction TABLE au moyen de l’option /MISSTEXT=’0′.

Avant sans MISSTEXT=’0′

proc tabulate data=class;
class sex/preloadfmt order=data;
var age;
table sex=‘ ‘,age=‘ ‘*mean=‘Mean Age’*f=5./printmiss;
format sex $sex.;
run;

Après avec MISSTEXT=’0′

proc tabulate data=class;
class sex/preloadfmt order=data;
var age;
table sex=‘ ‘,age=‘ ‘*mean=‘Mean Age’*f=5./printmiss misstext=’0′;
format sex $sex.;
run;

h1

Appeler une macro d’un catalogue permanent

septembre 27, 2009

Dans l’article « Sauvegarder une macro au delà d’une session« , vous avez vu comment créer un catalogue permanent pour macro. Ici, je vous propose d’appeler une macro contenue dans un de ces catalogues.

1. Rappel : ajouter une entrée dans un catalogue pour macro

libname sasref ‘C:/sasref’;
options sasmstore=sasref mstored;

%macro perm_macro /store;
proc print data=sashelp.class;
run;
%mend perm_macro;

2. Appeler une macro compilée

Les options globales qui indique la position d’un catalogue pour macros sont MSTORED et SASMSTORE= où SASMSTORE est suivi du nom de la bibliothèque.

libname sasref ‘C:/sasref’;
options mstored sasmstore=sasref;
%perm_macro;

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

Quel format a la pole position? (FMTSEARCH)

septembre 13, 2008

Sous SAS, les formats appliqués à une variable servent, entre autres, à rendre une information un peu plus compréhensible par l’oeil humain. Ces formats peuvent provenir de plusieurs sources. Il est important de savoir laquelle est privilégiée si plusieurs locations contiennent le même nom de format avec le même type (pour variable caractère ou numérique). L’option globale FMTSEARCH se charge de définir l’ordre privilégié.

Les sources disponibles : Par défaut, SAS dispose d’une série de formats (Liste disponible sur la documentation en ligne). L’utilisateur peut lui aussi créer ses propres formats sauvegardés de manière temporaire (dans la bibliothèque WORK) ou permanent (dans des bibliothèques définies par lui-même).

Exemple d’application : vous pouvez définir des formats communs à tous vos projets. Si un projet est particulier, vous pourrez définir un autre format portant le même nom que celui plus globale et demander qu’il soit privilégié.

Rappel : Pour revoir quelques notions de base sur les formats vous pouvez consultez ces trois articles:

Dans cet article, la notion de bibliothèque est requise. Vous pouvez vous reporter à l’article suivant si vous débutez :

1. Par défaut, il y a deux bibliothèques disponibles

La procédure affiche dans la log la valeur prise par les options globales. L’option OPTION réduit l’affichage à la seule option FMTSEARCH.

proc options option=fmtsearch;
run;

Il apparaît alors que les deux bibliothèques considérées par SAS sont WORK en priorité et les formats standards de SAS en second.

FMTSEARCH=(WORK LIBRARY)
List of catalogs to search for formats and informats

En exécutant l’instruction OPTIONS ci-dessous, l’ordre de priorité est changé.

options fmtsearch(library work);

Après une nouvelle exécution de la procédure PROC OPTIONS, le programmeur peut visualiser le changement.

Voir le résultat :

proc options option=fmtsearch;
run;

Contenu de la log :

FMTSEARCH=(LIBRARY WORK)
List of catalogs to search for formats and informats

2. Ajouter des bibliothèques

Des formats sauvegardés dans des fichiers catalogues : Les formats sont stockés dans des fichiers appelés FORMAT CATALOG. Il faudra que ces fichiers portent un nom FORMATS et l’extension pour désigner un catalogue.

Assigner la bibliothèque contenant le catalogue : Pour considérer des FORMAT CATALOG permanents définis par l’utilisateur, il faut désigner le chemin d’accès au fichier par un nom de bibliothèque (instruction LIBNAME) et ajouter ce nom dans la bibliothèque dans la liste de FMTSEARCH.

Exemple : Dans l’exemple qui suit, un format nommé GENDER est sauvegardé dans le fichier FORMATS.CATALOG au niveau de C:/SASREF, chemin pointé par la bibliothèque SASREF.

libname sasref ‘C:/sasref’;

proc format lib=sasref;
value gender 1=‘MALE’
2=‘FEMALE’;
run;

Puis ce format aura la priorité sur tout autre format GENDER créé de manière temporaire.

options fmtsearch=(sasref work library);

Voir le résultat :

proc options option=fmtsearch;
run;

Contenu de la log :

FMTSEARCH=(SASREF WORK LIBRARY)
List of catalogs to search for formats and informats

3. Important : La priorité de la bibliothèque WORK en cas d’omission.

Les deux exemples suivant donnent le même résultat car la bibliothèque temporaire est mise en priorité si elle n’est pas citée.

options fmtsearch=(work sasref library);
options fmtsearch=(sasref library);

WORK n’est pas ignoré comme pourrait le suggérer l’affichage dans la log ou mise en dernier.

Voir le résultat :

proc options option=fmtsearch;
run;

Contenu de la log :

FMTSEARCH=(SASREF LIBRARY)
List of catalogs to search for formats and informat

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

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;

h1

3 options pour un aperçu de vos données brutes (PROC PRINT)

février 2, 2008

Lors de l’écriture de votre programme, vous aurez une idée de l’état de votre jeu de données. En confrontant cet a priori avec un aperçu de vos données, vous agirez en sécurité et de manière professionnelle. La procédure d’impression (proc print) sera souvent suffisante pour avoir une vue rapide de vos données, concentrée sur les valeurs brutes compressées, sans label voir sans format.

1. Affichez le maximum d’information sur une page : en enlevant les blancs de fin de chaîne de caractère et les éventuels labels activés pour l’option label au niveau global, vous pourrez concentrer un plus grand nombre d’informations sur une page.

  • Pour un affichage minimum sans label, optez pour l’option WIDTH et la valeur minimum.
proc print data=demograph width=min;
run;
  • Pour seulement désactiver les labels le temps de la procédure, ajoutez l’option NOLABEL.
proc print data=demograph nolabel;
run;

2. Enlevez la variable « N° d’observation » : par défaut, la numérotation des observations avec un proc print apparaît. Ajoutez l’option NOOBS en référence à l’anglais « No observation ».

proc print data=demograph noobs;
run;

3. Visionnez les valeurs brutes : par défaut, les formats restent affichés. Pour les ôter les temps de la procédure, insérez le statement format dans la procédure. Deux options d’offrent à vous :

  • Lister chaque variable concernée
proc print data=demograph;
format mavar1 mavar2;
run;
  • Avec le mot-clé _all_ enlever le format de toutes les variables.
proc print data=demograph;
format _all_;
run;

4. Agrandissez la largeur de la page : dans le cas où un grand nombre de données sont à afficher mais pas à imprimer, vous pouvez agrandir la largeur de la page, appelée line size en anglais. Sinon, celles-ci apparaîtront sur plusieurs lignes rendant la lecture périlleuse.

options ls=250;

5. Affichez quelques observations : voir plusieurs centaines d’enregistrements n’apportera pas forcément plus d’information pour le développement de votre programme. L’impression des premières observations sera déjà une mine d’information. A la suite du nom du jeu de données, ajoutez entre parenthèses le numéro de la dernière observation via l’option OBS. Vous pouvez aussi changer la première observation par défaut avec FIRSTOBS.

proc print data=demograph (firstobs=100 obs=129);
run;

6. Pensez au copier/coller de Word : si vous envisagez de copier votre output sous Word, enlevez l’option pour centrer. SAS rajoute, en effet, des espaces pour centrer son texte qui s’avère contraignant dans un éditeur de texte.

options nocenter;

Dans le cas de la lecture des dictionnaires SAS, vous pouvez faire usage de la procédure SQL.