Publié le :
Administration CREATION_INTERNE

Actualisation de la bibliothèque de macros Lilly

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro AHGrefreshlilly effectue plusieurs opérations clés. Premièrement, elle utilise des DATA steps avec la commande `filename pip pipe 'dir ...'` pour lister tous les fichiers '.sas©' présents dans les sous-répertoires 'core' et 'inter' d'un chemin défini par la variable `kanbox`. Elle filtre les fichiers pour exclure 'refreshmac.sas©' et, si spécifié, pour inclure uniquement les fichiers listés dans le paramètre 'files'. Chaque fichier SAS© trouvé est ensuite inclus dynamiquement dans la session SAS© via `%include`. Deuxièmement, la macro initialise des chemins réseau (`SAdrive`, `macbackup`) et définit une libname `netmac` pointant vers le répertoire de sauvegarde des macros. Elle utilise ensuite des commandes système (`x mkdir`, `x copy`) pour créer un répertoire horodaté et copier tous les fichiers existants de la bibliothèque de macros vers ce nouveau répertoire de sauvegarde. Enfin, elle copie les catalogues (probablement contenant les macros compilées) du catalogue temporaire `work` vers la libname `netmac` (le répertoire de sauvegarde), assurant ainsi que la bibliothèque de macros est à jour et sauvegardée.
Analyse des données

Type : CREATION_INTERNE


Le script n'utilise pas de jeux de données SAS externes directement. Les deux 'DATA _NULL_' sont utilisés pour exécuter des commandes système et manipuler des chemins de fichiers, sans créer de jeux de données persistants. Les données traitées sont principalement des métadonnées de fichiers (noms de fichiers SAS) et des chemins d'accès.

1 Bloc de code
DATA STEP
Explication :
Ce bloc SAS Data Step, qui ne crée pas de jeu de données persistant ('_NULL_'), utilise la fonction `filename pip pipe 'dir ...'` pour exécuter la commande système 'dir' et lister les noms de fichiers '.sas' dans le répertoire 'core' défini par `kanbox`. Les noms de fichiers sont lus un par un. Il inclut une logique pour exclure 'refreshmac.sas' et pour filtrer les fichiers si le paramètre `&files` est fourni. Pour chaque fichier pertinent, il construit une commande `%include` et l'exécute dynamiquement via `call execute`, permettant d'inclure d'autres macros ou codes SAS.
Copié !
1 DATA _null_;
2 filename pip pipe "dir "&kanbox\core\*.sas " /b";
3 INFILE pip;
4 LENGTH file $100 com $300;
5 INPUT file ;
6 IF index(file,'refreshmac.sas') THEN return;
7 IF ("&files" ne '') and (not index(upcase("&files"),trim(upcase(file)))) THEN return;
8 com=("%include "&kanbox\core\"||file||"';");
9 put com=;
10 call execute(com);
11 RUN;
2 Bloc de code
DATA STEP
Explication :
Similaire au bloc précédent, ce second Data Step utilise également un 'DATA _NULL_' pour lister et inclure dynamiquement des fichiers '.sas'. La seule différence est qu'il cible le répertoire 'inter' au lieu de 'core' dans le chemin `kanbox`, effectuant la même logique de filtrage et d'inclusion dynamique pour les macros ou codes situés dans ce répertoire.
Copié !
1 DATA _null_;
2 filename pip pipe "dir "&kanbox\inter\*.sas " /b";
3 INFILE pip;
4 LENGTH file $100 com $300;
5 INPUT file ;
6 IF index(file,'refreshmac.sas') THEN return;
7 IF ("&files" ne '') and (not index(upcase("&files"),trim(upcase(file)))) THEN return;
8 com=("%include "&kanbox\inter\"||file||"';");
9 put com=;
10 call execute(com);
11 RUN;
3 Bloc de code
Macro et commandes système
Explication :
Ce bloc définit des variables locales pour les chemins réseau (`SAdrive`, `macbackup`) et alloue une libname `netmac` vers le répertoire de sauvegarde des macros. Il utilise ensuite deux macros (`%AHGdateandtime`, `%AHGpm`) pour générer une date/heure dans la variable `mydt` (non fournies, supposées exister ailleurs). Crucialement, il exécute des commandes système via l'instruction `x`: `x mkdir` pour créer un nouveau répertoire horodaté pour la sauvegarde, et `x copy` pour copier les fichiers existants de la bibliothèque vers ce nouveau répertoire. Enfin, `PROC DATASETS` est utilisée pour copier tous les catalogues (qui contiennent les macros compilées) de la bibliothèque temporaire 'work' vers la libname 'netmac', assurant ainsi la sauvegarde et l'actualisation de la bibliothèque de macros.
Copié !
1 %local macbackup;
2 %let SAdrive=\\gh3nas01\gh3nas_sales.grp\LCDDMAC\STATS\SA;
3 %let macbackup=&sadrive\Macro library\Macro learning tool\sas7bcat\mac;
4
5 LIBNAME netmac "&macbackup";
6 %local mydt;
7 %AHGdateandtime(mydt);
8 %AHGpm(mydt);
9
10 x mkdir "&macbackup&mydt";
11 x copy "&macbackup\*.*" "&macbackup&mydt";
12 PROC DATASETS lib=work;
13 copy out=netmac memtype=catalog;
14 RUN;
15 QUIT;
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
Michael
Responsable de l'infrastructure Viya.
« Cette macro AHGrefreshlilly est un modèle de gestion de configuration et de déploiement continu (CI/CD) appliqué à l'univers SAS. Elle ne se contente pas de charger du code ; elle orchestre l'inventaire, l'intégration et la sécurisation du patrimoine applicatif.

L'utilisation de call execute pour générer des %include est très efficace, mais elle peut rendre le débogage complexe dans le journal (Log). Pour une traçabilité optimale, assurez-vous que les options SOURCE et SOURCE2 sont activées afin de voir exactement quel code macro a été injecté durant le processus de rafraîchissement. »