Publié le :

Macro pour récupérer le label d'une variable

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro `%getVarLabel` prend en entrée le nom d'un jeu de données (`libds`, par défaut `sashelp.class`) et le nom d'une variable (`var`). Elle utilise les fonctions système SAS© pour ouvrir le jeu de données, vérifier l'existence de la variable et extraire son label. Si le jeu de données ne peut pas être ouvert ou si la variable n'existe pas, un message d'erreur ou une note est émis dans le log SAS©. La macro est compatible avec SAS© Viya 4 et est conçue pour être réutilisable.
Analyse des données

Type : MIXTE


Le paramètre `libds` de la macro utilise par défaut `sashelp.class`, qui est un jeu de données interne SAS. Les exemples d'utilisation inclus dans les commentaires de la macro créent également un jeu de données temporaire (`data test;`) en interne via un pas DATA, démontrant l'utilisation avec des données générées dans le script.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `%getVarLabel`. Elle ouvre un jeu de données spécifié par `libds` (ou `sashelp.class` par défaut) à l'aide de `%sysfunc(open)`. Elle détermine ensuite le numéro de la variable `var` avec `%sysfunc(varnum)` et récupère son label avec `%sysfunc(varlabel)`. Des messages d'erreur ou des notes sont générés si le jeu de données n'est pas ouvert ou si la variable est introuvable. Enfin, le jeu de données est fermé et le label de la variable est renvoyé.
Copié !
1%macro getVarLabel(libds=sashelp.class /* two level name */
2 , var= /* variable name for which to return the label */
3 );
4 %local dsid vnum vlabel rc;
5 /* Open dataset */
6 %let dsid = %sysfunc(open(&libds));
7 %IF &dsid > 0 %THEN %DO;
8 /* Get variable number */
9 %let vnum = %sysfunc(varnum(&dsid, &var));
10 %IF(&vnum. > 0) %THEN
11 /* Variable exists, so get label */
12 %let vlabel = %sysfunc(varlabel(&dsid, &vnum));
13 %ELSE %DO;
14 %put NOTE: Variable &var does not exist in &libds;
15 %let vlabel = %str();
16 %END;
17 %END;
18 %ELSE %put dataset &libds not opened! (rc=&dsid);
19 
20 /* Close dataset */
21 %let rc = %sysfunc(close(&dsid));
22 /* Return variable label */
23 &vlabel
24%mend;
2 Bloc de code
DATA STEP / MACRO CALLS Data
Explication :
Ce bloc fournit un exemple d'utilisation de la macro `%getVarLabel`. Il commence par créer un jeu de données temporaire nommé `test` avec trois variables (`str`, `num`, `x`) et leurs labels et formats associés. Ensuite, il appelle la macro `%getVarLabel` à quatre reprises avec diverses combinaisons de jeux de données et de variables, y compris des cas où la variable existe et où elle est manquante, pour démontrer la fonctionnalité de la macro. Les résultats des appels à la macro sont affichés dans le log SAS via la fonction `%put`.
Copié !
1DATA test;
2 label str='My String' num='My Number' ;
3 FORMAT str $1. num datetime19. x 8.;
4 stop;
5RUN;
6%put %getVarLabel(ds=test, var=str);
7%put %getVarLabel(ds=work.test, var=num);
8%put %getVarLabel(ds=test, var=x);
9%put %getVarLabel(ds=test, var=renegade);
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2016 Scott Bass (sas_l_739@yahoo.com.au). Ce code est sous licence Unlicense (http://unlicense.org/UNLICENSE), tel qu'indiqué dans le fichier @code_sas/@TEMPLATE.sas référencé.