Les données caractérisant un data set ou ses variables sont appelées des métadonnées. Les dictionnaires SAS stockent ce type d’information. Il s’agit ni plus ni moins que de tableaux contenant une ligne par data set ou une ligne par variable. Pour accéder aux dictionnaires, il faut passer par une PROC SQL et consulter les tableaux TABLES et COLUMNS de la bibliothèque DICTIONARY.
Note sur d’autres sources d’informations : Sachez, par ailleurs, qu’il existe d’autres moyens que la bibliothèque DICTIONARY pour accéder aux métadonnées.
- Reconstituées les data sets de référence avec des VIEWS : Les données peuvent être reconstituées à partir de vues (VIEWS) stockées dans la bibliothèque SASHELP. La procédure SQL ainsi que le data step peuvent s’en servir.
- Passer par une procédure : la procédure PROC DATASETS dispose de l’instruction CONTENTS syntaxe plus récente que le PROC CONTENTS.
La documentation SAS sur le sujet fait partie de Concepts : SQL Procedure.
1. Le dictionnaire décrivant les data sets : DICTIONARY.TABLES
Le dictionnaire TABLES contient une ligne par data set. Parmi les informations caractérisant un data set, celles qui me servent le plus souvent sont :
- La variable LIBNAME : le nom de la bibliothèque (library) sauvegardé dans la variable LIBNAME (library name)
- La variable MEMNAME : le nom du data set sauvegardé dans la variable MEMNAME. Entendez par là member name.
et de temps en temps
- La variable MEMTYPE : le type de fichier dans les dictionnaires TABLES et COLUMNS est soit DATA ou VIEW. DATA reste le type de fichier le plus fréquemment utilisé.
- La variable NOBS : le nombre d’observations dans le data set est sauvegardé dans la variable NOBS.
Liste de toutes les variables avec leur label :
- Library Name (libname)
- Member Name (memname)
- Member Type (memtype)
- Dataset Label (memlabel)
- Dataset Type (typemem)
- Date Created (crdate)
- Date Modified (modate)
- Number of Observations (nobs)
- Observation Length (obslen)
- Number of Variables (nvar)
- Password Protection (protected)
- Compression Routing (compress)
- Encryption (encrypt)
- Number of Pages (npage)
- Percent Compression (pcompress)
- Reuse Space (reuse)
- Bufsize (bufsize)
- Deleted Observations (delobs)
- Type of Indexes (indxtype)
- Data Representation (datarep)
- Requirements Vector (reqvector)
2. Le dictionnaire décrivant les variables : DICTIONARY.COLUMNS
Le dictionnaire COLUMNS contient une ligne par variable.
Les informations sur le fichier source : Comme précédemment, le nom du data set (MEMNAME) contenant la variable et sa bibliothèque (LIBNAME) sont des informations très importantes. Le MEMTYPE dest aussi fourni.
Le nom de la variable (NAME) : Le nom de la variable est sauvegardé dans la variable NAME. Les valeurs sont soient en minuscule, soit en majuscule, soit un mélange des deux.
Cela dépend de la manière dont le nom a été saisi la première fois lors de la création de la variable.
Les détails les plus usuels : je consulte le plus souvent le type de la variable : pour les variables texte, la variable TYPE prend la valeur « char » et pour les variables numériques, elle prend la valeur « num ». C’est différent de la sortie d’un PROC CONTENTS qui prend des valeurs numériques.
Les détails occasionnels : Après viennent par exemple :
- la longueur de la variable (LENGTH)
- le format de la variable (FORMAT)
- le label de la variable (LABEL)
- le numéro de la variable dans le data set (VARNUM)
Liste de toutes les variables dans DICTIONARY.COLUMNS avec leur label :
- Library Name (libname)
- Member Name (memname)
- Member Type (memtype)
- Column Name (name)
- Column Type (type)
- Column Length (length)
- Column Position (npos)
- Column Number in Table (varnum)
- Column Label (label)
- Column Format (format)
- Column Informat (informat)
- Column Index Twpe (idxusage)
3. Majuscule ou minuscule
Dans le dictionaire DICTIONARY.TABLES et dans le dictionnaire DICTIONARY.COLUMNS, le nom de la bibliothèque (LIBNAME) et le nom du data set (MEMNAME) sont sauvegardés en majuscule.
Le nom des variables varie dans un dictionnaire selon la première saisie faite du nom lors de sa création.
Pour éviter des erreurs, il est donc plus simple de faire des comparaisons après avoir mis les valeurs contenues dans les dictionnaires dans la même style : tout majuscule ou tout minuscule ou seul la première lettre en majuscule. Vous pouvez consulter l’article « Majuscule ou minuscule sous SAS« .
4. Deux exemples
Dans ce premier exemple tous les data sets SAS de la bibliothèque SASHELP sont listés.
proc sql;
select libname, memname
from dictionary.tables
where upcase(libname)=‘SASHELP’ and
upcase(memtype)=‘DATA’;
quit;
Dans ce second exemple, toutes les variables caractères du data set CLASS stocké dans la bibliothèque SASHELP sont affichées avec leur position.
proc sql;
select name, varnum
from dictionary.columns
where upcase(libname)=‘SASHELP’ and
upcase(memname)=‘CLASS’ and
upcase(type)=‘CHAR’;
quit;
5. Lister toutes les variables
Lister toutes les variables grâce au symbole étoile : La liste des variables contenues dans les dictionnaires TABLES and COLUMNS ici n’est pas exhaustive. Vous pouvez remplacer le nom des variables à garder par une étoile (*) afin de les voir toutes.
Afficher le nom des variables et non les labels en changeant l’option globale : Par défaut, le nom des variables n’apparaît pas dans l’OUTPUT mais le nom de leur label. Pour afficher le nom de la variable, il suffira de remplacer l’option globale label.
Afficher sur une ligne : Enfin, le nombre de variables contenues dans un dictionnaire peut ne pas s’afficher sur une seule ligne.
- Changer le nombre de caractères imprimables sur la page. Ce nombre varie entre 64 et 256.
- Donner une largueur d’affichage identique pour toutes les variables. L’option FLOW= de l’instruction PROC SQL limite le nombre de caractères disponibles pour l’affichage des variables.
options nolabel ls=255;
proc sql flow=10;
…
quit;
options label;