Publié le :
Macro CREATION_INTERNE

Liste des datasets d'une librairie

Ce code est également disponible en : Deutsch English Español
La macro `dslist` a pour objectif de fournir une liste des datasets contenus dans une librairie SAS© donnée. Elle accepte un paramètre `libref` pour spécifier la librairie à analyser, avec une gestion des valeurs par défaut ('user' ou 'work' si non fourni). Un paramètre optionnel `prefix` permet d'inclure le nom de la librairie devant chaque nom de dataset dans la liste résultante. L'implémentation utilise `PROC SQL` pour interroger la table système `dictionary.tables`, filtrant les entrées pour les membres de type 'DATA' appartenant au `libref` cible. La liste compilée des noms de datasets est ensuite affectée à la variable macro globale `_dslist_`.
Analyse des données

Type : CREATION_INTERNE


Les données sont obtenues en interrogeant la table système `dictionary.tables` de SAS, qui fournit des métadonnées sur toutes les tables enregistrées dans l'environnement SAS. Il s'agit d'une source d'information interne au système SAS et non de données externes ou créées par l'utilisateur directement dans ce script.

1 Bloc de code
Macro SAS
Explication :
Ce bloc marque le début de l'exécution de la macro et de sa définition. Il annonce l'appel de la macro et initialise la variable macro globale `_dslist_` à vide. Il contient la logique pour attribuer une valeur par défaut au paramètre `libref` si celui-ci n'est pas renseigné (utilisant l'option système 'user' ou 'work') et s'assure que le `libref` est en majuscules.
Copié !
1%put MACRO CALLED: dslist v1.0;
2 
3%macro dslist(libref,prefix);
4 %global _dslist_;
5 %let _dslist_=;
6 %IF not %LENGTH(&libref) %THEN %let libref=%sysfunc(getoption(user));
7 %IF not %LENGTH(&libref) %THEN %let libref=work;
8 %let libref=%upcase(&libref);
2 Bloc de code
PROC SQL
Explication :
Ce segment utilise `PROC SQL` en mode silencieux (`noprint`) pour interroger la table de métadonnées `dictionary.tables`. Il sélectionne tous les noms de membres (`memname`) distincts qui sont de type 'DATA' et qui appartiennent à la librairie spécifiée par `&libref`. Les noms récupérés sont stockés dans la variable macro `_dslist_`, avec un séparateur conditionnel : soit un espace, soit `&libref..` si le paramètre `prefix` est activé.
Copié !
1 PROC SQL noprint;
2 select distinct memname into :_dslist_ separated BY
3 %IF %LENGTH(&prefix) %THEN %DO;
4 " &libref.."
5 %END;
6 %ELSE %DO;
7 ' '
8 %END;
9 from dictionary.tables
10 where memtype='DATA'
11 and LIBNAME="&libref";
12 QUIT;
3 Bloc de code
Macro SAS
Explication :
Ce dernier bloc ajuste la variable macro `_dslist_` si le `prefix` était utilisé, car le 'separated by' dans `PROC SQL` ne s'applique qu'entre les éléments, pas au premier. Il termine la `PROC SQL` avec `run;` et conclut la définition de la macro `dslist` avec `%mend`.
Copié !
1%IF %LENGTH(&prefix) %THEN %let _dslist_=&libref..&_dslist_;
2 
3RUN;
4%mend dslist;
5 
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 : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.