Publié le :
Macro CREATION_INTERNE

Analyse des dépendances de macros et vérification de version SAS

Ce code est également disponible en : Deutsch English Español Français
Attention : Ce code nécessite des droits administrateur.
Le script principal définit la macro '%depby' qui permet d'identifier les macros dépendantes d'une macro cible spécifiée. Pour ce faire, elle utilise plusieurs macros utilitaires importées. En complément, le fichier '_version.sas©' (inclus) contient la macro '%_version', qui compare la version actuelle de SAS© (obtenue via la variable automatique '&sysver') à une version requise. L'ensemble de ces macros constitue des outils pratiques pour comprendre et gérer l'écosystème des macros SAS©.
Analyse des données

Type : CREATION_INTERNE


Les macros contenues dans ce script opèrent principalement sur les métadonnées internes du système SAS, les variables macro automatiques et les définitions de macros. Aucune donnée externe ou provenant de librairies SASHELP n'est directement traitée, ni aucune donnée n'est créée ou modifiée dans des tables de données.

1 Bloc de code
Macro '%depby'
Explication :
Ce bloc de code définit la macro '%depby'. Elle utilise une série de macros utilitaires pour déterminer quelles autres macros SAS dépendent d'une macro spécifiée par l'utilisateur. La macro sauvegarde temporairement les options SAS courantes, puis construit une liste de toutes les macros disponibles. Elle itère sur cette liste, vérifie les dépendances de chaque macro par rapport à la macro cible et agrège les noms des macros dépendantes. Le résultat est soit assigné à une variable macro fournie, soit affiché dans le log SAS. L'utilisation de '%option' pour gérer les options du système justifie la catégorie 'Administration'.
Copié !
1%import(dep);
2%import(option);
3%import(listmacro);
4%import(ismacroref);
5%import(canonicalname);
6%import(sas_str_contain);
7 
8%macro depby(name, _list_);
9 %local option;
10 %option(option);
11 %let name=%canonicalname(&name.);
12 %IF "&name."="" %THEN
13 %goto exit;
14 %local allmacros;
15 %listmacro(allmacros);
16 %local i mm macrolist;
17 %let i=1;
18 %let mm=%scan(&allmacros., &i., %str( ));
19 
20 %DO %while("&mm."^="");
21 %local dep;
22 %dep(&mm., dep);
23 %IF %sas_str_contain(&dep., &name.) %THEN
24 %DO;
25 %let macrolist=¯olist. &mm.;
26 %END;
27 %let i=%eval(&i.+1);
28 %let mm=%scan(&allmacros., &i., %str( ));
29 %END;
30 
31 %IF %ismacroref(&_list_.) %THEN
32 %DO;
33 %let &_list_.=¯olist.;
34 %END;
35 %ELSE
36 %put ¯olist.;
37%exit:
38 %option(option);
39%mend;
2 Bloc de code
Macro '%_version'
Explication :
Ce bloc définit la macro '%_version', dont le but est de comparer la version actuelle de SAS à une version minimale requise. Elle utilise la variable automatique '&sysver' pour obtenir la version de l'environnement SAS. Le calcul compare les numéros de version (majeur et mineur) et renvoie 1 si la version actuelle est supérieure ou égale à la version spécifiée, et 0 sinon. Le paramètre optionnel 'notes' permet d'afficher ce résultat directement dans le log SAS.
Copié !
1%put NOTE: You have called the macro _VERSION, 2006-02-15.;
2%put NOTE: Copyright (c) 2001-2006 Rodney Sparapani;
3%put;
4 
5%macro _version(arg1, notes=, version=&arg1);
6 
7%local RESULT;
8%let RESULT=%eval(%scan(&sysver, 1, .)*100+0%scan(&sysver, 2, .)>=%scan(&version, 1, .)*100+0%scan(&version, 2, .));
9%IF %LENGTH(¬es) %THEN %put NOTE: _VERSION is returning the value &RESULT;
10 
11&RESULT
12 
13%mend _version;
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) 2015 coco, All Rights Reserved. (macro depby); Copyright (c) 2001-2006 Rodney Sparapani (macro _version)