Publié le :

Recherche Chemin Physique Libname

Attention : Ce code nécessite des droits administrateur.
Ce programme explore trois approches différentes pour déterminer le chemin absolu d'un libname SAS©. Il commence par afficher le chemin du libname 'WORK' via %SYSFUNC, puis définit un libname 'DATAGIT' et en affiche le chemin en utilisant successivement %SYSFUNC, une lecture de la vue système SASHELP.VLIBNAM dans un DATA step _NULL_, et enfin une requête sur la table DICTIONARY.LIBNAMES via PROC SQL.
Analyse des données

Type : MIXTE


Le script utilise des vues système SAS (SASHELP.VLIBNAM, DICTIONARY.LIBNAMES) pour obtenir des informations sur les libnames définis. Il définit également un libname 'datagit' pointant vers un chemin externe, mais n'en utilise pas les données directement pour traitement, se contentant de récupérer son chemin physique.

1 Bloc de code
MACRO %SYSFUNC
Explication :
Ce bloc utilise la fonction macro %SYSFUNC avec la fonction PATHNAME pour obtenir le chemin physique du libname prédéfini 'WORK' et l'affiche dans le log SAS. Il illustre une méthode directe pour interroger les propriétés d'un libname.
Copié !
1%let pathwork = %sysfunc(pathname(work));
2%put Path of the work libref:;
3%put &pathwork;
4%put -----------;
5%put -----------;
2 Bloc de code
MACRO %SYSFUNC
Explication :
Définit un nouveau libname 'DATAGIT' pointant vers un répertoire spécifié sur le système de fichiers. Ensuite, il utilise de nouveau %SYSFUNC(PATHNAME()) pour obtenir le chemin physique de ce libname 'DATAGIT' et affiche le résultat dans le log. Ceci confirme que la méthode fonctionne aussi pour les libnames personnalisés.
Copié !
1LIBNAME datagit '/home/nicolasdupont0/Data';
2%let pathdatag = %sysfunc(pathname(datagit));
3%put Path of the datagit libref:;
4%put &pathdatag;
5%put -----------;
6%put -----------;
3 Bloc de code
DATA STEP
Explication :
Un DATA step `_null_` est utilisé pour lire la vue système `SASHELP.VLIBNAM`. Cette vue contient des informations sur tous les libnames actifs. Le code filtre cette vue pour le libname 'DATAGIT', conserve uniquement les variables 'libname' et 'path', puis utilise `CALL SYMPUTX` pour assigner la valeur du chemin ('path') à une variable macro nommée 'datagitpath'. Le chemin est ensuite affiché dans le log.
Copié !
1DATA _null_;
2 SET sashelp.vlibnam(keep=LIBNAME path where=(LIBNAME='DATAGIT'));
3 call symputx('datagitpath',path,'l');
4RUN;
5 
6%put Path of the datagit libref:;
7%put &datagitpath;
8%put -----------;
9%put -----------;
4 Bloc de code
PROC SQL
Explication :
Cette procédure SQL interroge la table système `DICTIONARY.LIBNAMES` qui fournit des métadonnées sur les bibliothèques SAS. La clause `NOPRINT` supprime l'affichage des résultats de la requête. Elle sélectionne le chemin ('path') correspondant au libname 'DATAGIT' et stocke cette valeur directement dans une variable macro 'datagitpath2' grâce à la clause `INTO :`. Le chemin est finalement affiché dans le log.
Copié !
1PROC SQL noprint;
2 /*describe table dictionary.libnames;*/
3 select path into :datagitpath2
4 from dictionary.libnames
5 where LIBNAME='DATAGIT';
6QUIT;
7%put Path of the datagit libref:;
8%put &datagitpath2;
9%put -----------;
10%put -----------;
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 : Created : 05/07/2017, Last update : 11/07/2017, Author(s) : Nicolas Dupont, Tested on SAS Studio 9.4 onDemand


Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Ce programme illustre parfaitement la polyvalence de SAS lorsqu'il s'agit d'extraire des métadonnées de session. Identifier le chemin physique d'un libref est essentiel pour automatiser des transferts de fichiers, générer des rapports dynamiques ou interagir avec le système d'exploitation.

Analyse des trois méthodologies employées :

L'Approche Macro (%SYSFUNC) : C'est la méthode la plus directe et la plus légère. En utilisant pathname(), vous obtenez l'information instantanément sans solliciter le moteur de données. C'est l'outil idéal pour des besoins ponctuels au sein d'un flux de macro-programmation.

L'Approche Data Step (VLIBNAM) : En interrogeant la vue système sashelp.vlibnam, le script accède au catalogue des bibliothèques actives. L'utilisation du where et du keep est une excellente pratique de performance, permettant de charger en mémoire uniquement l'information strictement nécessaire avant de l'exporter en variable macro via call symputx.

L'Approche SQL (DICTIONARY) : La table dictionary.libnames est la version "bas niveau" et standardisée des métadonnées de session. La clause into :variable est ici la méthode la plus élégante pour peupler une variable macro à partir d'une requête, offrant une lisibilité maximale pour les développeurs habitués au langage SQL.

Pourquoi comparer ces méthodes ? Bien que le résultat soit identique, le choix de la méthode dépend du contexte :

%SYSFUNC pour la rapidité et la simplicité.

DATA Step pour intégrer la recherche dans une logique de programmation complexe avec plusieurs conditions.

PROC SQL pour sa puissance de filtrage et sa syntaxe universelle.

Astuce d'expert : Attention à la casse ! Dans les tables DICTIONARY ou les vues SASHELP, les noms de bibliothèques (libname) sont toujours stockés en majuscules. Si votre clause where utilise 'datagit' au lieu de 'DATAGIT', la requête échouera silencieusement. »