
Mettre à jour une table SAS à partir des métadonnées
mars 30, 2009Les métadonnées (metadata) peuvent se présenter sous la forme de tables SAS (data sets). Elles donnent une description d’une table SAS.
Si un data set existe déjà, vous pouvez retrouver des métadonnées dans le dictionnaire COLUMNS ou avec un PROC CONTENTS : nom de variable, position, type, longueur, format, etc.
Mais ce qui est intéressant est de préparer ce descriptif à l’avance pour créer ou actualiser un jeu de données.
Ici, nous verrons comment définir des métadonnées et les appliquer sur un data set existant.
1. Créer un data set de base pour l’exemple
Le data set AE contient la variable SASREF qui prend la valeur 1.
data ae;
sasref=1;
run;
proc contents data=ae varnum;
run;
2. Créer les métadonnées pour l’exemple
Le data set contenant les métadonnées est composé de six variables :
- La position des variables (MYVARNUM)
- Le nom des variables (MYNAME)
- Leur libellé (MYLABEL)
- Leur type (numérique ou alphanumérique) (MYTYPE)
- La longueur des variables (MYLENGTH)
- Leur format (MYFORMAT)
data meta_ae;
length myvarnum 8 myname $8 mylabel $14 mytype $1 mylength 8 myformat $11;
input myvarnum myname mylabel 12–25 mytype mylength myformat;
datalines;
1 SUJECTID Subject Number C 10 10.
2 RECID Record ID N 8 10.
3 AETERM Term C 60 60.
4 AE_SD Starting Day N 8 2.
5 AE_SM Starting Month N 8 2.
6 AE_SY Starting Year N 8 4.
7 AE_SDAT Starting Date N 8 DATE9.
8 AESEV Severity N 8 AESEV.
;
run;
3. Créer le format AESEV pour l’exemple
Dans les métadonnées, le format AESEV s’applique à la variable sur la gravité (severity) de l’effet secondaire (adverse event).
proc format;
value aesev 1=‘Severe’
2=‘Mild’;
run;
4. Objectif
Le but est de construire une étape data où les instructions ATTRIB sont listées avant de lire les données de AE. Ces ATTRIB servent à définir les variables du data set AE dans l’ordre indiqué par MYVARNUM dans les métadonnées avec leur libellé, type, longueur et format.
De plus, seules les variables listées dans les métadonnées seront gardées. La variable SASREF devra disparaître.
5. Lister les variables à garder dans une macro variable
Afin de ne garder que les variables présentent dans les métadonnées, une liste en est faite. Elle est sauvegardée dans la macro variable MYNAME_LST. Cette liste sera ensuite appelée dans une option KEEP=.
proc sql noprint;
select distinct myname into : myname_lst separated by ‘ ‘
from meta_ae;
quit;
6. Générer le programme
Le programme est généré au moyen d’un DATA _NULL_.
Un tri préalable des métadonnées : L’ordre dans lequel les instructions ATTRIB seront listées affectera l’ordre d’apparition des variables. L’instruction PROC SORT s’assure que ces instructions apparaîtront dans l’ordre donnée dans les métadonnées par la variable MYVARNUM.
proc sort data=meta_ae;
by myvarnum;
run;
Un catalogue pour écrire le programme : J’ai choisi ici de sauvegarder le programme généré dans un catalogue pointé dans l’étape data sous le nom SASREF. Ce nom est précédemment défini au moyen de l’instruction FILENAME.
Après exécution du programme (%INCLUDE),
- le FILENAME désignant ce catalogue est désactivé (instruction FILENAME) et
- le catalogue lui-même est supprimé (PROC DATASETS).
Vous pouvez choisir d’utiliser un simple nom de fichier à supprimer ensuite manuellement ou avec une commande Unix/Windows (cf instruction FILENAME en vert).
filename sasref catalog ‘work.sasref.meta.source’;
*filename sasref ‘C:/sasref/attrib_meta.sas’;
L’activation de l’instruction *FILE PRINT; à la place de FILE SASREF vous permettra de voir votre code dans la fenêtre OUTPUT lors du développement du code.
Des outils optionnels : Les arobases @ et +(-1) sont simplement là pour l’apparence du programme mais n’affecte en aucun cas l’exécution du code. Ils sont donc optionnels.
- Les arobases font débuter le texte à la position donnée par le nombre qui suit.
- Les +(-1) permettent de revenir d’une position en arrière avant de continuer à taper le texte. Ainsi le blanc créé automatiquement avec PUT n’existe plus.
Distinguer les variables numériques des variables alphanumériques : Un symbole dollar $ est obligatoire pour définir la longueur et le format des variables. Il est donc de faire varier le texte en fonction du type (variable MYTYPE=N ou C).
data _null_;
set meta_ae end=eof;
*file print;
file sasref;
if _N_=1 then put ‘data ae (keep= &myname_lst.);’;
put @4 ‘attrib ‘ myname @23 « label = ‘ » mylabel +(-1) « ‘ » ;
if mytype=‘N’ then
do;
put @23 ‘length = ‘ mylength;
put @23 ‘format = ‘ myformat +(-1)’;’;
end;
else if mytype=‘C’ then
do;
put @23 ‘length = $’ mylength;
put @23 ‘format = $’ myformat +(-1) ‘;’;
end;
if eof then
do;
put @3 ‘set ae;’;
put ‘run;’;
end;
run;
%include sasref;
filename sasref;
proc datasets memtype=catalog ;
delete sasref;
run;
7. Le résultat
Au final, le data set AE contient les variables listées dans les métadonnées et seulement ces variable
proc contents data=ae varnum;
run;
Lectures complémentaires :
Publié dans Advanced, Attributs, Data Management, Data Step, Intructions globales, Langage Macro, Les procédures, Par Etapes, Par Niveau Certification, Par niveaux, Par thématique, proc datasets, proc sql, SAS intermédiaire | Tagué attrib, catalog, data _null_, filename, informatique, Métadonnées, metadata, proc datasets, programmation, SAS |
[…] Mettre à jour une table SAS à partir des métadonnées […]