Publié le :
Macro CREATION_INTERNE

Macros de gestion de noms canoniques et versionning

Ce code est également disponible en : Deutsch English Español
Ce code source définit principalement la macro `%canonicalname` qui permet de résoudre des noms abrégés (ex: `l.start`) en noms complets (ex: `sas©_log_start`) en se basant sur des variables macro globales de type `g_handler_`. Il inclut également le contenu de la macro `_version` qui compare la version du système SAS© (`&sysver`) à une version requise passée en paramètre.
Analyse des données

Type : CREATION_INTERNE


Le code ne manipule pas de tables de données (datasets). Il effectue uniquement des opérations sur des chaînes de caractères et des variables macro.

1 Bloc de code
MACRO
Explication :
Définition de la macro `canonicalname`. Elle prend en entrée un nom, le nettoie (minuscules, suppression d'espaces), et tente de résoudre un préfixe (handler) s'il contient un point. Si un handler correspondant existe (ex: `g_handler_l`), il est substitué. Elle gère également une logique spécifique pour le préfixe `sas_lang_`.
Copié !
1%macro canonicalname(name);
2 %let name=%qcmpres(%lowcase(&name.));
3 
4 %IF %LENGTH(&name.)=0 %THEN
5 %return;
6 
7 %IF "%sysfunc(count(&name., .))"="1" %THEN
8 %DO;
9 %local len;
10 %let len=%index(&name., .);
11 
12 %IF &len.=1 or &len.=%LENGTH(&name.) %THEN
13 %return;
14 %local handler;
15 %let handler=%scan(&name., 1, .);
16 %let name=%scan(&name., 2, .);
17 
18 %IF %LENGTH(&handler.)=0 %THEN
19 %let handler=%str();
20 %ELSE %IF %symexist(g_handler_&handler.) %THEN
21 %DO;
22 %let handler=&&g_handler_&handler.;
23 %END;
24 %ELSE
25 %DO;
26 %put WARNING: Handler<&handler.> not found!;
27 %return;
28 %END;
29 %let name=&handler.&name.;
30 %END;
31 %local saslang;
32 %let saslang=sas_lang_;
33 
34 %IF %index(&name., &saslang.)=1 %THEN
35 %DO;
36 %let name=%substr(&name., %eval(%LENGTH(&saslang.)+1));
37 
38 %IF %index(&name., _)>0 %THEN
39 %let name=&saslang.&name.;
40 %END;
41 %* check IF name is valid.;
42 
43 %IF %nvalid(&name.) %THEN
44 %DO;
45 &name.
46 %END;
47%mend;
2 Bloc de code
MACRO
Explication :
Définition de la macro `_version`. Elle retourne 1 (vrai) si la version courante de SAS est supérieure ou égale à la version demandée en argument, sinon 0 (faux).
Copié !
1%macro _version(arg1, notes=, version=&arg1);
2 
3%local RESULT;
4%let RESULT=%eval(%scan(&sysver, 1, .)*100+0%scan(&sysver, 2, .)>=%scan(&version, 1, .)*100+0%scan(&version, 2, .));
5%IF %LENGTH(¬es) %THEN %put NOTE: _VERSION is returning the value &RESULT;
6 
7&RESULT
8 
9%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. / Copyright (c) 2001-2006 Rodney Sparapani