Il est très courant en SAS de créer un programme à partir d’une instruction FILENAME et d’une étape data. Souvent les informations contenues dans un fichier de référence servent à faire varier quelques lignes de code.
1. Le data set pour l’exemple
Dans cet exemple, il est demandé de renommer toutes les variables commençant pas z_ de manière automatique car le nom et le nombre de ces variables peut varier.
data lab; input patient z_test1 $ test1_val z_test2 $ test2_val; datalines; 1 TEMP 38 HR 80 ; run;
Si deux variables seulement seraient à renommer et si elles s’appelaient toujours Z_TEST1 et Z_TEST2, le code serait tout simplement.
data lab; set lab (rename=(z_test1=test1 z_test=test2)); run;
Ou
data lab; set lab; rename z_test1=test1 z_test2=test2; run;
Ou
data lab; set lab; rename z_test1=test1; rename z_test2=test2; run;
C’est cette dernière forme qui nous intéressera de reproduire de manière automatique.
2. Créer le fichier de référence
La liste de toutes les variables commençant pas Z_ du data set temporaire LAB, est sauvegardée dans le data set REF et plus particulièrement dans la variable OLD_NAME. On choisit en plus d’ajouter une seconde variable NEW_NAME contenant les noms sans les Z_.
Dans notre exemple, vu qu’il y a 2 variables à renommer, le data set REF contient deux observations dans la variable NAME.
proc sql; create table ref as select name as old_name, subst(old_name,3) as new_name from dictionary.columns where upcase(libname)='WORK' and upcase(memname)='LAB' and upcase(name) like 'Z_%'; quit;
3. Créer un fichier .sas avec une instruction filename et une étape data
Dans un second temps, l’emplacement et le nom du programme SAS à créer sont à donner. C’est le rôle de l’instruction FILENAME. Pour y faire ensuite référence, il suffit d’utiliser le surnom donné dans l’instruction. Ici, il s’agit du surnom SASREF.
filename sasref 'C:/sasref/rename_z.sas';
Les instructions FILENAME et LIBNAME ont des similarités. Dans une instruction LIBNAME, le nom de la bibliothèque s’appelle le LIBREF. Ici on parle de FILEREF. Tous les deux (LIBREF et FILEREF) doivent avoir une longueur de 8 au maximum et ne doit pas commencer par un chiffre.
4. Une étape data
Dans un troisème temps, une étape data est donnée pour écrire le programme.
- Ne pas créer de data set, DATA _NULL_ : Comme, il n’y a pas besoin de créer de data set, le nom du data set est remplacé par le mot _NULL_.
- Désigner le nom du fichier .sas à créer, FILE: Puis, on précise où les informations contenues dans lesinstructions PUT seront copiées.
- Lire les données du fichier de référence, SET : Après, il faut désigner notre data set REF contenant les observations dans l’instruction SET.
- Utiliser la variable automatique _N_=1 pour désigner la première boucle autour de l’étape data et donc ici la première observation : Lors de la lecture de la première observation du data set REF les instructions DATA LAB et SET LAB seront écrites dans le programme.
- Ajouter autant d’instruction RENAME que d’observations dans le ficihier REF : Pour chacune des observations de REF, une instruction RENAME sera écrite. Le contenu variera en fonctions des valeurs contenues dans les variables OLD_NAME et NEW_NAME.
- Utiliser l’option END= pour désigner la dernière observation du data set REF : Enfin à la lecture de la dernière observation, une instruction RUN est ajoutée. Pour désigner la dernière observation, on fait appel à l’option END= de l’instruction SET qui nous permet d’introduire une nouvelle variable nommée EOF. Celle variable prend la valeur 0 pour toutes les observations du data set REF sauf la dernière qui prend la valeur 1.
data _null_; file sasref; set ref end=eof; if _N_=1 then do; put 'data lab;'; put ' set lab;'; end; put ' rename ' old_name '=' new_name ' ;'; if eof then put 'run;'; run;
5. Exécuter le programme
Pour terminer il est possible d’appeler le programme avec une instruction %INCLUDE et d’enlever le lien qui existe entre SASREF et le fichier (desassign the filename reference)
Appeler le programme :
%include sasref;
Couper le lien entre le FILEREF et le programme RENAME_Z.SAS :
filename sasref clear;
Pour vous entraîner, vous pouvez faire varier le code et essayer de retrouver les autres syntaxes pour renommer les variables citées en première partie.