Publié le :
Administration CREATION_INTERNE

Assignation dynamique d'une librairie SAS via les métadonnées

Attention : Ce code nécessite des droits administrateur.
La macro '%assign_metalib' a pour but de rendre disponible une librairie SAS© pré-définie dans les métadonnées. Elle prend un unique argument, 'libref', qui est le raccourci de la librairie à activer. La macro vérifie d'abord si le libref est déjà assigné dans la session SAS© en cours à l'aide de la fonction %sysfunc(libref()). Si c'est le cas, une note est affichée et le traitement s'arrête. Sinon, elle exécute une étape DATA _NULL_ pour interroger les métadonnées SAS©. La fonction metadata_getnobj recherche l'objet 'SASLibrary' correspondant au libref fourni. Si un unique objet est trouvé, la fonction metadata_getattr est appelée pour en extraire l'attribut 'Name' (le nom de la librairie). Ce nom est ensuite stocké dans une variable de macro. Finalement, une instruction 'LIBNAME' avec le moteur 'META' est exécutée pour assigner la librairie. Le script inclut des gestions d'erreurs si le libref est introuvable ou si plusieurs librairies correspondent dans les métadonnées.
Analyse des données

Type : CREATION_INTERNE


La macro ne manipule pas de données tabulaires directement. Elle interroge le serveur de métadonnées SAS pour récupérer des informations de configuration (le nom de la librairie). Le but est de préparer l'accès aux données, dont la source dépendra de la définition de la librairie dans les métadonnées.

1 Bloc de code
MACRO
Explication :
Ce bloc définit l'intégralité de la macro '%assign_metalib'. Elle utilise les fonctions %SYSFUNC et les appels de métadonnées (metadata_getnobj, metadata_getattr) dans un DATA _NULL_ pour trouver le nom d'une librairie à partir de son libref. Ensuite, elle exécute l'instruction LIBNAME avec le moteur META pour l'assigner. C'est une tâche typique d'administration et d'automatisation dans un environnement SAS 9 ou Viya avec des librairies pré-enregistrées.
Copié !
1%macro assign_metalib(libref=/* libref that needs to be assigned */
2 );
3%IF %sysfunc(libref(&libref)) %THEN %DO;
4 DATA _null_;
5 LENGTH lib_uri LIBNAME $200;
6 call missing(of _all_);
7 nobj=metadata_getnobj("omsobj:SASLibrary? @Libref='&libref'",1,lib_uri);
8 IF nobj=1 THEN DO;
9 rc=metadata_getattr(lib_uri,"Name",LIBNAME);
10 call symputx('libname',LIBNAME,'L');
11 END;
12 ELSE IF nobj>1 THEN putlog "ERROR: More than one library with libref='&libref'";
13 ELSE putlog "ERROR: Library '&libref' not found in metadata";
14 RUN;
15 
16 LIBNAME &libref meta library="&libname";
17 %IF %sysfunc(libref(&libref)) %THEN
18 %put ERROR: assign_metalib macro could not assign &libref;
19%END;
20%ELSE %put NOTE: Library &libref is already assigned;
21%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.
Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« La macro %assign_metalib illustre parfaitement le passage d'une programmation statique à une programmation pilotée par les métadonnées. Au lieu de coder en dur des chemins physiques, on s'appuie sur le "cerveau" du serveur SAS pour configurer l'environnement. »