Posts Tagged ‘catalogue’

h1

Aller-Retour entre dataset et catalogue de formats avec CNTLIN en CNTLOUT

décembre 29, 2012

Dans un précédent article, je parlais des deux méthodes pour créer des formats avec une procédure proc format, la première étant de taper toutes les values dans une instruction value, la seconde étant de stocker ces valeurs dans un data set et de les convertir en format avec l’option cntlin. Aujourd’hui, je souhaite revenir sur l’option CNTLIN et son pendant CNTLOUT pour passer d’un dataset à un format et pour passer d’un format à un dataset.

1. Créer une table SAS (dataset) type

Pour débuter créons un data set (table SAS) appelée POP avec 4 colonnes START, LABEL, TYPE et FMTNAME. Cette table contient les données pour deux formats : un format numérique et un format alphanumérique. Ces deux formats sont appelés GRP.

data pop;
length start $40 label $200 type $1 fmtname $32;
retain fmtane 'GRP' type 'N';
start='10';
label='Per Protocol';
output;
start='11';
label='Modified Per Protocol';
output;
start='20';
label='Intent-to-Treat';
output;
start='21';
label='Modified Intent-to-Treat';
output;
type='C';
start='PP';
label='Per Protocol';
output;
start='mPP';
label='Modified Per Protocol';
output;
start='ITT';
label='Intent-to-Treat';
output;
start='mITT';
label='Modified Intent-to-Treat';
output;
run;

S’il est possible de convertir de convertir le nombre 100 stocker dans une variable alphanumérique en numérique, il est impossible de convertir le mot ABC en numérique. Dans cet exemple on comprend mieux pour quoi START est toujours alphanumérique qu’il s’agisse dun format numérique ou alphanumérique.

2. Passer d’un dataset à un format catalog

A présent la procédure proc format convertit le data set en format catalogue. Le data set est situé dans la bibliothèque (library) WORK. Il n’y a pas besoin de préciser la bibliothèque de la table POP. Par défaut le format catalog s’appellera FORMATS et sera stocké dans la bibliothèque WORK. L’option LIB n’est pas utilisé.

proc format cntlin=pop;
run;

Ainsi le code au dessus est équivalent à :

proc format cntlin=work.pop lib=work.formats;
run;

Le code proposé ci-dessus est uniquement là pour faciliter la compréhension. Sauf besoin particulier, la version simplifiée doit suffire.

3. Passer d’un format catalog à un dataset

Dans un second temps, je vous propose de convertir ce format dans un autre dataset.

proc format cntlout=pop2; 
run;

Ainsi le code au dessus est équivalent à :

proc format cntout=work.pop2 lib=work.formats; 
run;

A vous de jouez avec les proc print et librairies pour voir la résultat.

4. Rappel sur le nom du format

Notez ici que le nom du format est au maximum long de 32 caractères en  SAS 9.1.3 / SAS 9.2  et limité à 8 caractères pour la version SAS 8.2. Pour être plus précis, on a 32 caractères pour un format numérique et 31 caractères pour un format alphanumérique en SAS 9.1.3 et SAS 9.2, SAS gardant un caractère pour le symbole dollar $. SAS 8.2 fonctionnait sur le même principe : 8 caractères pour un format numérique et 7 caractères pour un format alphanumérique. Si le nom du format était trop long en SAS 8.2, SAS le coupe à la longueur maximum. Ainsi les nom  ALPHABETA et ALPHABETI sont interprétés pas SAS 8.2 en FMTNAME=ALPHABET pour un format numérique.

Aller plus loin

h1

Copier une table dans une autre bibliothèque (PROC COPY)

mars 28, 2009

Lors de ses débuts avec SAS, l’étape data est souvent la méthode utilisée pour créer une table (data set) dans une bibliothèque différente de celle d’origine. Cette approche est tout à fait logique lorsque des modifications sont intervenues sur la table. Par contre, dans le cas d’un copier 1/1, la performance est meilleure avec un PROC COPY car les observations ne sont pas lues.

1. Créer une table SAS, une vue SAS et fichier catalogue pour les formats pour l’exemple

Afin de monter les variantes de la procédure PROC COPY, trois types de fichiers (member type) sont créés dans la bibliothèque WORK:

  • une table SAS (data set) nommée DSN
  • une vue (view) nommée VIEW NAME
  • un format catalog nommé FORMATS par défaut et contenant un seul format ici : NY

data dsn;
   x=1;
run;

proc sql;
   create view viewname as
      select *
      from sashelp.class;
quit;

proc format;
   value ny 0=’No’
            1=’Yes’;
run;

2. Copier tous les trois fichiers SAS dans la bibliothèque SASREF

Par défaut, tous les types de fichiers de la bibliothèque WORK sont copiés dans SASREF

libname sasref ‘C:/sasref’;
proc copy in=work out=sasref;
run;
libname sasref;

3. Ajouter de la flexibilité

Pour ajouter de la flexibilité, vous pouvez limiter le choix

  • à un type de fichier : memtype=data, memtype=view ou  memtype=catalog
  • à des noms de fichiers à sélecionner (instruction SELECT) ou à exclure (instruction EXCLUDE)

proc copy in=work out=sasref; *memtype=data;
   *select dsn formats;
   *exclude dsn formats;

run;

Rien ne  vous empêche d’utiliser plusieurs instructions SELECT (ou EXCLUDE) : une par type de fichiers

proc copy in=work out=sasref;
   select dsn     / memtype=data;
   select formats / memtype=catalog;
run;

4. PROC DATASETS alternative à PROC COPY

Développée plus récemment, la procédure PROC COPY englobe les fonctionnalités de plusieurs procédures et est enrichie de commandes qui lui sont propres.

PROC COPY fait partie des fonctionalités de PROC DATASETS. Par défaut, la bibliothèque de la procédure DATASETS est WORK. Pour la modifier au seul niveau de COPY, ajouter IN= dans l’instruction COPY. Cela aura la priorité sur l’option LIBRARY= de l’instruction PROC DATASETS.

proc datasets; * library=work; *memtype=data;
   copy /*in=work*/ out=sasref;
   select dsn     / memtype=data;
   select formats / memtype=catalog;
run;

Lectures complémentaires :

En savoir plus avec la SAS Online Doc :

  • The COPY Procedure
  • The DATASETS Procedure (l’intruction COPY)
  • The DATASETS Procedure for Unix
  • The DATASETS Procedure for Windows
  • The DATASETS Procedure for z/OS
h1

Sauvegarder une macro au delà d’une session SAS

janvier 8, 2009

Par défaut, une macro est créée le temps d’une session. En effet, elle est sauvegardée dans le catalogue réservé aux macros (macro catalog) de la bibliothèque WORK. Comment changer la bibliothèque en vue d’une utilisation ultérieure de la macro ?

1. Par défaut, créer une macro temporaire

Dans un premier temps, une macro appelée TMP_MACRO est créée. Cette macro est sauvegardée dans un fichier appelé un macro catalog de la bibliothèque WORK.

%macro tmp_macro;
proc print data=sashelp.class;
run;
%mend tmp_macro;

2. Sauvegarder de manière permanente la macro

A présent, il s’agit de sauvegarder la macro PERM_MACRO dans la biblioht`que SASREF. Comme précédemment, elle sera sauvegardée dans un catalogue ne pouvant contenir que des macro. Ce catalog s’appelle toujours SASMACR.

Grâce aux options SASMSTORED= et MSTORE, on précise à SAS que les macros à conserver (to store) seront à diriger dans la bibliothèque SASREF.

Ensuite, lors de la définition de la macro PERM_MACRO, on indique à SAS que cette macro fait partie des macros à conserver au delà de la session SAS. Elle sera donc sauvegardée dans la bibliothèque SASREF.

libname sasref 'C:/sasref';
options sasmstore=sasref mstored;

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

L’option STORE maintient la bibliothèque SASREF en activité. Il est alors impossible de désassigner la bibliothèque SASREF. Si vous avez une solution à ce problème, n’hésitez pas à nous la faire partager.

*libname sasref;
h1

Supprimer un data set SAS en 6 points (PROC DATASETS)

octobre 6, 2008

Supprimer un data set SAS est une des fonctionnalités de la procédure PROC DATASETS. Voici donc quelques détails sur la syntaxe.

Les options de l’instruction PROC DATASETS donnent la possibilité de supprimer, dans une bibliothèque donnée, tous les fichiers sans distinction de nom (KILL). Certains options réduisent la sélection à certains types de fichiers (MEMTYPE). L’affichage par défaut dans les fenêtres OUTPUT et LOG est contrôlable avec d’autres options (NOLIST et NOWARN). Pour ajouter un peu de flexibilité, il est possible de nommer les fichiers à supprimer ou à garder dans des instructions complémentaires (DELETE et SAVE).

1. Un option pour supprimer tous les fichiers quelque soit leur nom, KILL : Pour supprimer tous les fichiers SAS contenu dans une bibliothèque temporaire, il suffit d’ajouter l’option KILL à l’instruction PROC DATASETS.

2. Par défaut, supprimer tous les types de fichiers MEMTYPE=ALL : En effet, l’option MEMTYPE est par défaut égale à tout (MEMTYE=ALL). Cela comprend 3 types de fichiers :

  • data sets (MEMTYPE=DATA),
  • vues (MEMTYPE=VIEW) ou
  • catalogues (MEMTYPE=CATALOG),

Cela veut dire que les formats, qui sont toujours sauvegardés dans un CATALOG, sont également supprimés.

3. Par défaut, supprimer les fichiers de la bibliothèque temporaire, LIB=WORK : De plus, par défaut, la bibliothèque est temporaire (LIB=WORK) est concernée.

Un premier exemples : Les deux procédures suivantes donnent le même résultat.

proc datasets kill;
quit;

proc datasets lib=work
memtype=all
kill;
quit;

4. Supprimer l’affichage dans la fenêtre OUTPUT avec l’option NOLIST : Pour éviter un affichage dans la fenêtre OUTPUT, vous pouvez ajouter l’option NOLIST ou encadrer la procédure entre deux instructions ODS :

  • ODS LISTING CLOSE : stopper la redirection par défaut vers la fenêtre OUTPUT
  • ODS LISTING : réactiver la redirection vers la fenêtre OUTPUT

5. Désigner les fichiers à garder ou supprimer par leur nom

Deux instructions, soit DELETE, soit SAVE permettent de se concentrer sur quelques fichiers en particulier à supprimer ou non quand l’option KILL n’est pas présente.

Si le type d’un fichier est différent de la majorité des fichiers listés dans l’instruction DELETE (ou SAVE), le type est à définir entre parenthèse avec le mot-clé MEMTYPE= après son nom.

Un second exemple en deux parties

Dans l’exemple qui suit, deux formats  (GENDER et GRP) créés dans la bibliothèque SASREF et tous les data sets de la bibliothèque SASHELP incluant le data set CLASS y sont également copiés.

libname sasref ‘C:/sasref/blog’;

proc format lib=sasref;
value gender 1=‘Male’
2=‘Female’;
value grp    1=‘Per Protocol (PP)’
2=‘Intent to Treat (ITT)’
3=‘Safety’;
run;

proc copy in=sashelp out=sasref memtype=data;
run;

Par défaut, tous les data sets listés dans l’instruction DELETE sont supprimés. A cela s’ajoute le catalogue contenant le format GRP. Il restera donc le format GENDER et tous les data sets sauf CLASS dans la bibliothèque SASREF.

proc datasets lib=sasref
memtype=DATA;
delete class grp (memtype=catalog);
run;

6. Supprimer un fichier qui n’existe pas

Dans certains cas, le nom des fichiers créés dans un programme varie. A la phase de suppression, le fichier manquant sera assortie d’une note dans la LOG:

NOTE: The file SASREF.GENDRE (MEMTYPE=CATALOG) was not found but appear on a DELETE statement.

Deux options s’offrent à vous pour l’éviter :

  • Ajouter l’option NOWARN : dans l’instruction PROC DATASETS, l’option empêchera l’affichage de la note sur les fichiers manquants.
  • Exécuter l’instruction conditionnellement : identifier les fichiers à supprimer au préalable via les dictionnaires et les stocker dans une macro variable.

NOTE : Sachez que PROC COPY a son équivalent dans la procédure PROC DATASETS. Cela dépasse cependant l’objet de cet article.

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;