Macro pour lister les variables d'un dataset

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
La macro '%getVarList' est conçue pour extraire les noms de toutes les variables d'un dataset SAS© donné. Elle prend deux paramètres : 'libds' (le nom du dataset à deux niveaux, avec 'sashelp.class' comme valeur par défaut) et 'dlm' (le délimiteur à utiliser pour séparer les noms de variables dans la chaîne de sortie, l'espace étant le délimiteur par défaut). La macro utilise les fonctions macro '%sysfunc(open)', '%sysfunc(attrn)' et '%sysfunc(varname)' pour ouvrir le dataset, déterminer le nombre de variables et récupérer le nom de chaque variable. Elle concatène ensuite ces noms de variables en une seule chaîne, en utilisant le délimiteur spécifié. En cas d'échec de l'ouverture du dataset, un message d'erreur est affiché. Le résultat est la chaîne de caractères contenant la liste des variables.
Analyse des données

Type : SASHELP


La macro utilise le dataset interne SASHELP.CLASS par défaut pour démontrer sa fonctionnalité. Cependant, elle est conçue pour fonctionner avec tout dataset SAS valide fourni via le paramètre 'libds', qu'il soit interne ou externe. Elle ne crée ni ne modifie de données, mais extrait des métadonnées (noms de variables).

1 Bloc de code
MACRO %getVarList
Explication :
Ce bloc définit la macro '%getVarList'. Il déclare des variables macro locales. La fonction '%sysfunc(open(&libds))' tente d'ouvrir le dataset spécifié et renvoie un identifiant de dataset (dsid) ou 0 en cas d'échec. Si l'ouverture réussit, '%sysfunc(attrn(&dsid,NVARS))' récupère le nombre de variables. Une boucle parcourt ensuite toutes les variables en utilisant '%sysfunc(varname(&dsid,&x))' pour obtenir leur nom. Les noms sont concaténés dans la variable macro 'outvar' en utilisant le délimiteur 'dlm'. Enfin, le dataset est fermé avec '%sysfunc(close(&dsid))' et la chaîne résultante 'outvar' est renvoyée.
Copié !
1/***
2 Macro to get a list of variables directly from a dataset.
3 WAY faster than dictionary tables or sas views, and can
4 also be called in macro logic (is pure macro).
5 Default is to have space delimited variable names in &MyGlobalVar.
6
7 @html/SAS Help Center_ isAuthorized Action.html Allan Bowe @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_1.json @code_sas/_version.sas 9.2 @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_1.json @code_sas/assert_i_config_usage_configtest.sas
8 %put %getVarList(libds=sashelp.class);
9 @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_1.json
10 
11 #macrofunction
12 
13***/
14 
15%macro getVarList(libds=sashelp.class /* two level name */
16 ,dlm=%str( ) /* provide delimeter (eg comma or space) to separate vars */
17 );
18 /* declare local vars */
19 %local outvar dsid nvars x rc dlm;
20 
21 /* open dataset in macro */
22 %let dsid=%sysfunc(open(&libds));
23 
24 %IF &dsid %THEN %DO;
25 %let nvars=%sysfunc(attrn(&dsid,NVARS));
26 %IF &nvars>0 %THEN %DO;
27 /* add first dataset variable to global macro variable */
28 %let outvar=%sysfunc(varname(&dsid,1));
29 /* add remaining variables with supplied delimeter */
30 %DO x=2 %to &nvars;
31 %let outvar=&outvar.&dlm%sysfunc(varname(&dsid,&x));
32 %END;
33 %END;
34 %let rc=%sysfunc(close(&dsid));
35 %END;
36 %ELSE %DO;
37 %put unable to open &libds (rc=&dsid);
38 %let rc=%sysfunc(close(&dsid));
39 %END;
40 /* return the value */
41 &outvar
42%mend;
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) 2001-2006 Rodney Sparapani (du fichier _version.sas); Copyright 2010-2023 HMS Analytical Software GmbH (du fichier assert_i_config_usage_configtest.sas). Les commentaires dans la macro analysée font également référence à 'Allan Bowe'.