Archive for the ‘Intructions globales’ Category

h1

Des options pour se débarrasser de WARNING de SAS 9.2

août 18, 2010

Avec SAS 9.1.3 et SAS9.2 de nouveaux warning apparaissent. En voici deux que vous pouvez faire disparaître dans le cas où ils ne reflètent pas un problème dans votre programme.

  1. Avec PROC SQL, je crée une nouvelle table du même nom que la table source.
  2. Dans un data set je réduis la longueur d’une variable

1. Utiliser le même nom de data set en entré et en sortie avec PROC SQL

Pour illustrer le sujet, je vais d’abord créer un data set appelé ONE avec deux variables X et Y.

data one;
x=‘A’;
y=‘B’;
run;

Ensuite je vais créer avec PROC SQL un nouveau data set du même nom ONE qui ne contiendra que la variable X.

proc sql;
create table one as
select x
from one;
quit;

Le message dans la log ressemble à ceci:
WARNING: This CREATE TABLE statement recursively reference the target table. A consequence of this is a possible data integrity problem.

Pour ne plus avoir ce message dans la log, ajouter l’option UNDO_POLICY=NONE

proc sql undo_policy=none;
create table one as
select x
from one;
quit;

Ce cas existe depuis SAS 9.1.3.

2. Réduire la longueur d’une variable dans une étape data

Une solution pour changer la longueur d’une variable est de définir sa longueur dans une instruction LENGTH avant de lire les données avec un SET par exemple.

Depuis SAS 9.2, si la nouvelle longueur est plus petite que l’ancienne un WARNING apparaît dans la log. Ceci est une bonne chose car cela vous permet de repérer d’éventuelles coupures (truncations) de vos données.

Dans certains cas cependant, vous savez pertinemment que le nombre de caractères dans données est au plus X et que dès lors elles ne seront pas coupées en réduisant la longueur.

Vous pouvez vous épargner le warning en encadrant votre étape data des options globales VARLENCHK=nowarn et VALENCHK=warm.

Je vous conseille d’appliquer cette option localement afin de pouvoir continuer à repérer d’autres coupures potentielles non prévues.

data two;
length x $32;
x=‘A’;
run;

data two_a;
length x $1;
set two;
run;

WARNING : Multiple lengths were specified for the variable x by input data set(s). This may cause truncation of data.

options varlenchk=nowarn;
data two_b
length x $1;
set two;
run;
options varlenchk=warn;

Notez cependant, qu’avec SAS 9.1.3 ou SAS 9.2, un warning apparaît dès lors que la variable est donnée dans une instruction BY. L’option VARLENCHK de SAS 9.2 ne vous enlèvera pas le warning. Je vous conseille donc de changer votre longueur au préalable si vous ne voulez pas ce WARNING.

data two_b;
length x $1;
set two;
by x;
run;

WARNING: Multiple lengths were specified for the BY variable x by input data sets and LENGTH, FORMAT, INFORMAT statements. This may cause unexpected results.

Lectures complémentaires :

h1

Quand l’option NOLABEL réserve des surprises !

février 22, 2010

L’option global NOLABEL permet notamment de ne pas afficher les labels dans un PROC SQL. Comme tout option globale, il est courant d’ajouter ce type d’instruction en début de programme. Est-ce que cette option a des conséquences sur l’allocation des libellés sur les variables ou ailleurs ?

1. Assigner un label aux variables du data set CLASS

Dans l’exemple qui suit un data set CLASS est créé. Un libellé est ajouté aux variables NAME et HEIGHT. Au préalable l’option global NOLABEL est ajoutée.

options nolabel;

data class;
label name = ‘Nom’ height=‘Taille’;
set sashelp.class;
run;

2. Que constate t-on lorsque l’option NOLABEL est active ?

En consultant la description des données avec un PROC CONTENTS ou un PROC SQL, les labels n’apparaissent pas.

proc contents data=class varnum;
run;


proc sql;
select name, label
from dictionary.columns
where upcase(libname)=‘WORK’ and
upcase(memname)=‘CLASS’;
quit;


3. Que se passe t-il une fois que l’option LABEL est de nouveau active ?

Une fois l’option LABEL actif, les libellés sont bien assignés aux variables. Ils ne sont simplement invisibles tant que l’option NOLABEL est active.

options label;

proc contents data=class varnum;
run;

proc sql;
select name, label
from dictionary.columns
where upcase(libname)=‘WORK’ and
upcase(memname)=‘CLASS’;
quit;

h1

Créer un libname à partir d’un autre libname

janvier 18, 2010

De manière occasionnelle, il est pratique de définir une nouvelle bibliothèque SAS à partir d’une autre bibliothèque plutôt qu’en redonnant le chemin d’accès à la bibliothèque. Voici un exemple de cette syntaxe. Simple et efficace.

Un cours exemple

Dans un premier temps, la bibliothèque PROJECT est créée. Elle désigne le répertoire C:/sasref.

libname project ‘C:/sasref’;

Dans un second temps, la bibliothèque MAIN est créée. Entre parenthèses est précisée qu’il faut utiliser comme répertoire celui de la bibliothèque PROJECT.

libname main (project);

Lectures complémentaires

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

Tout sur l’instruction BY

avril 14, 2009

Me rendant compte que l’instruction BY pouvait poser des difficultés lorsqu’on débute avec SAS, j’ai décidé de faire le point sur cette instruction.

1. Une instruction locale

L’instruction BY peut servir dans toutes les étapes data et procédures à l’exception de PROC SQL.

2. Un ordre défini par le nom des variables :

L’instruction BY est suivie du nom des variables servant pour le tri.

Dans un premier temps, les observations sont triées selon les valeurs de la première variable citée, ici SEX. Puis, pour chacune des valeurs prises par SEX (M et F), les données sont triées par NAME.

proc sort data=sashelp.class out=class;
   by sex name;
run;

3. PROC SORT : le premier usage de l’instruction BY : L’instruction BY est logiquement obligatoire dans un PROC SORT. Sinon SAS ne saurait pas dans quel ordre trier les données. Le mot DESCENDING peut-être ajouté pour préciser un ordre décroissant. Ici les données sont d’abord triées par SEX puis par nom en ordre descendant.

proc sort data=sashelp.class out=class;
   by sex descending name;
run;

L’autre manière de trier les données est d’utiliser la procédure PROC SQL.

Idée : Vous aurez souvent un PROC SORT avant d’utiliser l’instruction BY dans une autre procédure ou étape data. Simplifiez-vous la vie en copiant l’insstruction au niveau du PROC SORT et en la collant au niveau de la procédure ou étape data suivante.

4. SAS vous informe si les données ne sont pas triées comme indiqué

L’instruction BY précise à SAS dans quel ordre les données doivent être lues. Si les données ne respectent pas cet ordre, SAS s’arrête et fourni un message d’erreur.

5. L’instruction BY : obligatoire ou optionnelle ?

L’instruction BY est optionelle dans une instruction SET. Utilisée pour empiler les données de deux data sets, elle permettra d’intercaler les observations des deux sources selon leur valeurs au lieu de mettre d’abord toutes les observations du premier data set cité et ensuite toutes les observations du second data set.

L’instruction BY reste pratiquement indispensable avec MERGE puisqu’elle sert à relier les observations de deux data sets par les variables du même nom. Sans elle, les observations du second data set pour les variables du même nom réécrirait sur celle du premier.

L’instruction BY est indispensable avec FIRST et LAST.

6. D’autres usages de l’instruction BY

L’instruction BY peut s’ajouter dans un PROC REPORT. Une option NOBYLINE permettra de changer le titre à chaque nouvelle combinaison de valeurs désignée par l’instruction. Néanmoins la mise à jour du titre par cette approche avec ODS RTF par exemple ne fonctionne pas.

L’instruction BY peut servir dans toutes less procédures (sauf PROC SQL) et notamment dans les procédures statistiques. Voir dans les lectures complémentaire l’usage de l’instruction BY avec PROC FREQ.

Lectures Complémentaires

SAS Online Doc

  • BY-Group Processing in SAS Programs
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

Il était une fois la LOG

juin 23, 2008

La fenêtre LOG (ou JOURNAL pour la version française de SAS) contient des informations plus ou moins détaillées sur le travail effectué par SAS. Ces informations peuvent être sauvegardées dans un fichier externe ou être supprimées lors de l’exécution du programme.

1. Une LOG plus ou moins détaillée

Deux situations se présentent :

  • lire les détails de l’exécution d’une macro
  • accéder aux détails d’un fichier .sas inclus dans un autre programme (%INCLUDE…)

Changer les options par défauts : les options MPRINT, MLOGIC et SYMBOLGEN s’adresse à la macro et SOURCE2 au programme inclus. Par défaut, ces options sont désactivées. Elles ont pour but d’aider le programmeur au stade du développement.

Voir le statut actuel des options : pour connaître l’état actuel d’une de ces options, il faut consulter la log après avoir exécuté la procédure options.

proc options;
run;

Remettre les options dans leur état initial : pour désactiver ces options, on utilise NOMPRINT, NOMLOGIC, NOSYMBOLGEN et NOSOURCE2.

Exemple, partie 1 : Le fichier main_include.sas contient l’instruction OPTIONS, le format AGE et la macro RAPPORT.

options source2 mprint mlogic symbolgen;

proc format;
   value age
   11-13 = ’11-13′
   14-16 = ’14-16′
   other = ‘Autre’;
run;

%macro rapport (dsn=);
proc report data=&dsn;
   columns name age sex;
   define name /‘Nom’ display;
   define age  /‘Age’ display ;
   define sex  /‘Sexe’ display;
   format age age.;
run;
%mend rapport;

Exemple, partie 2 : Dans un second programme, le premier programme et la macro RAPPORT sont appelés.

%include ‘C:/sasref/main_include.sas’;
%rapport (dsn=sashelp.class);

2. Commander la suppression du contenu de la LOG

Sous Windows, par défaut, à chaque nouvelle exécution d’un programme, la log grossie. Pour la vider, il y a deux possibilités : une manuelle et une automatique.

Après avoir activé la fenêtre log en la sélectionnant, il y a trois choix possibles :

  • Combiner les touches clavier Ctrl et E (raccourci clavier CTRL+E)
  • Sélectionner menu Edit/Clear All.
  • Taper la commande log;clear; dans le cadre en haut à gauche de l’écran

Cela marche aussi avec les fenêtres OUTPUT et EDITOR. Remplacez seulement le mot LOG par OUTPUT ou EDITOR pour la commande.

Pour une action automatique, l’instruction DM permet d’inclure dans le programme les mots-clés donné jusqu’à présent dans le cadre pour les commandes.

proc print data=sashelp.class;
run;

dm ‘log;clear;’;

3. Sauvegarder le contenu de la LOG dans un fichier externe

Rediriger le contenu de la log : la procédure PROC PRINTTO permet de rediriger le contenu de la log dans un fichier externe. Pour cela, le nom du fichier à créer et son chemin d’accès sont définis dans LOG=. Au choix, l’extension du fichier est .log ou .txt.

Rediriger le listing : le contenu de la fenêtre OUTPUT peut-être aussi redirigé. Cette fois-ci, il faut utiliser FILE=.

Ecraser les anciens fichiers : pour effacer le contenu d’un précédent fichier, il y a l’option NEW dans l’instruction PROC PRINTTO.

Réinitialisation : pour réactiver les destinations par défaut, la procédure sans argument est soumise à SAS.

proc printto log=‘C:/sasref/class.log’ new;
run;

proc printto file=‘C:/sasref/class.txt’ new;
run;

proc print data=sashelp.class;
run;

proc printto;
run;

h1

3 propositions pour exporter un graphique

mai 8, 2008

Créer un graphique est une chose. Pouvoir l’extraire de SAS pour l’exploiter en est une autre. Ici, nous verrons comment l’envoyer directement dans un document Word, comment sauvegarder son graphique sous forme de fichier image ou sous forme de catalogue graphique SAS. Pour cela nous utiliserons un diagramme en barre généré avec PROC GCHART.

A chaque fois, les options graphiques sont au préalable réinitialisées avec RESET=ALL. Puis un DEVICE GIF est assigné.

goptions reset=all;
goptions device=gif;

1. Ajouter un graphique dans un fichier Word

L’output Delivery System (ODS) est assez récent dans SAS. RTF est le format lu part Word. La procédure générant le code SAS est entouré de deux instructions ODS RTF. La première définie le nom et la destination du fichier RTF. La seconde stoppe l’écriture dans le fichier RTF

goptions reset=all;
goptions device=gif;

ods rtf file=‘C:/sasref/dest_word.rtf’;
   proc gchart data=cnt;
      vbar maingrp /sumvar=cnt ;
   run;

ods rtf close;

2. Envoyer un graphique dans un catalogue graphique SAS

Un catalogue (catalog) est un fichier propre à SAS. On peut y stocker soit des graphiques (graphic catalog), soit des formats (format catalog) mais pas les deux à la fois. Ici, on stocke le fichier dans un catalogue graphique nommé DEST_CAT, qui est sauvegardé dans la bibliothèque SASREF. Ces graphiques peuvent être ensuite rappelés par un PROC GREPLAY pour créer une nouvelle image. Celle-ci sera soit une superposition de graphiques, soit des graphiques mis les uns à côté des autres. Cette image pourra aussi être insérés dans un document RTF via ODS RTF TEXT (fichiers JPG ou PNG seulement, pas de fichier GIF…). Dans tous les cas, ODS LISTING doit être activé.

goptions reset=all;
goptions device=jpeg;
  
libname sasref ‘C:/sasref/dest_pic.jpg’;

proc gchart data=cnt gout=sasref.dest_cat;
   vbar maingrp /sumvar=cnt ;
run;

3. Sauvegarder un graphique sous forme de fichier image

Pour créer une image, il faut au préalable ajouter GSFNAME= à l’instruction GOPTIONS. Le chemin d’accès à l’image et son nom sont définis dans une instruction FILENAME. Le nom de ce FILENAME est rappelé dans GSFNAME.

filename orig ‘C:/sasref/dest_pic.gif’;

goptions reset=all;
goptions device=gif gsfname=orig;

proc gchart data=cnt;
   vbar maingrp /sumvar=cnt ;
run;

filename orig clear;

Annexe : data set source

data cnt;
   input maingrp $ subgrp $ subgrp2 $ cnt;
   datalines;
1 1 A 12
1 2 A 13
1 3 B  6
2 1 A 15
2 2 B 22
2 3 B 10
2 4 B  2
2 5 B 51
3 1 A 13
3 2 A 21
;
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

Et par magie mon jeu de données a disparu (LIBNAME)

mars 6, 2008

Etagères

Une des premières choses à comprendre en SAS est la notion de temporaire et permanent qui s’appliquent aux fichiers. Pour cela, il faut introduire la notion de bibliothèque (library). Ici, je vous propose plus particulièrement de voir les jeux de données SAS, communément appelés data sets.

Un data set c’est quoi ? Un data set SAS est un fichier SAS contenant un tableau. Chaque colonne a un nom et fait référence à une variable, chaque ligne correspond aux observations. Ce type de fichier est créé par SAS via un data set pour une procédure SQL.

Un nom de data set sans extension dans un programme SAS : un jeu de données a un nom pouvant suivant quelques règles de notation :

  • longueur de 32 caractères,
  • nom commençant par une lettre ou un trait bas,
  • caractères suivant pouvant aussi être des chiffres

Une extension (ex. : .sas7bdat) n’est visible que dans une arborescence comme Windows Explorer. Pour le nommer dans un programme, le nom sans l’extension est utilisé. Mais comment SAS sait-il où ce fichier est sauvegarder ?

1. Sauvegarde temporaire 

Un répertoire vidé automatiquement : par défaut, SAS assumera que le data set est sauvegardé dans un répertoire défini lors de l’installation du logiciel. Ce répertoire est vidé à chaque fermeture du logiciel. Dans le cas d’un travail en mode batch (par opposition au mode interactif), ce répertoire est vidé à la fin de chaque soumission de programme.

Pour les curieux : si vous êtes curieux de savoir l’emplacement de votre répertoire temporaire, utilisez la procédure option. La réponse est située dans la fenêtre LOG de SAS. A priori cette information ne vous servira pas pour votre travail de programmation sauf cas exceptionnel (après plusieurs années de SAS, je n’en ai toujours pas eu besoin).

proc options option=work;
run;

WORK ? C’est le petit nom pour parler de ce répertoire au contenu temporaire : l’accès à ce répertoire a un petit nom ! WORK. Le mot WORK est optionnel : ainsi si on veut écrire dans un programme le nom d’un data set dans son intégralité, il suffira d’ajouter WORK avant le nom du jeu de donné et d’utiliser un point comme séparateur. Comme WORK est la valeur par défaut, un data set nommé DEMO et sauvegardé sous WORK sera référencé indifféremment DEMO ou WORK.DEMO. Lors de la fermeture du logiciel SAS, le fichier DEMO sera supprimé. C’est pour cela que l’on parle de fichier temporaire. Du coup, comment créer un data set qui puisse survivre à une session SAS ?

2. Des data sets qui survivent

Une ‘library’ fait référence à un espace de stockage : le répertoire temporaire, WORK, fait partie de la catégorie des bibliothèques. Et en anglais bibliothèque se traduit… ? library. Pour faire référence à un autre répertoire, qui lui ne sera pas vidé automatique par SAS, il faut de définir dans une instruction LIBNAME (LIB comme notre LIBRARY de tout à l’heure et NAME, donc nom de bibliothèque). Une convention similaire au nom de data set à part la longueur. Comme pour WORK, il faut donner un petit nom au chemin d’accès à ce répertoire. On parle de LIBREF.

  • 8 caractères sont autorisés au maximum.
  • Comme un nom de data set, il commencera par une lettre ou un trait bas.
  • Pour les autres caractères les chiffres sont aussi valides.

Trois composants principaux pour l’instruction LIBNAME : l’instruction LIBNAME est composée du mot-clé LIBNAME, du petit nom et du chemin d’accès entre guillemets.


libname origin ‘C:\sasref\origine’;
libname propre ‘C:\sasref\propre’;

Désactiver une bibliothèque : par défaut, la bibliothèque sera valide jusqu’à la fin de la session en mode interactif. Pour désactiver la bibliothèque plus tôt, il suffit de la nommer sans préciser le chemin d’accès et en ajoutant clear. Si on veut les désassigner toutes, le nom de la bibliothèque sera remplacée par le mot-clé _all_ (SAS Online Doc: The Libname Statement Syntax for Relational Databases).


libname origin clear;
libname propre clear;
libname _all_ clear;

Consulter la vue SASHELP.VSLIB pour connaître les bibliothèques actives : les vues sont des fichiers contenant un code. Lors de la lecture de ce fichier, le code est soumis. Cela permet de retrouver en temps réel l’information, la dernière. On trouve notamment la vue VSLIB sauvegardés dans le répertoire permanent de SASHELP. Grâce à cette vue vous découvrirez également les autres bibliothèques créées lors de l’installation de SAS (MAP, SASHELP,SASUSER) qui ne sont pas vidées en fin de session et dans lesquelles on ne modifie rien, on lit seulement.

proc sql;
   select *
   from sashelp.vslib;
quit;

L’instruction LIBNAME a plusieurs options. Mais étant utilisés de manières sporadique pour des cas bien particulier, cela ne relève pas d’un article pour débutant en SAS.