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