Veröffentlicht am :
Macro CREATION_INTERNE

Makros zur Verwaltung kanonischer Namen und Versionierung

Dieser Code ist auch verfügbar auf: English Español Français
Dieser Quellcode definiert hauptsächlich das Makro `%canonicalname`, das es ermöglicht, abgekürzte Namen (z.B. `l.start`) in vollständige Namen (z.B. `sas©_log_start`) auf Basis globaler Makrovariablen vom Typ `g_handler_` aufzulösen. Es enthält auch den Inhalt des Makros `_version`, das die Version des SAS©-Systems (`&sysver`) mit einer als Parameter übergebenen erforderlichen Version vergleicht.
Datenanalyse

Type : CREATION_INTERNE


Der Code manipuliert keine Datentabellen (Datasets). Er führt nur Operationen an Zeichenketten und Makrovariablen aus.

1 Codeblock
MACRO
Erklärung :
Definition des Makros `canonicalname`. Es nimmt einen Namen als Eingabe, bereinigt ihn (Kleinbuchstaben, Entfernen von Leerzeichen) und versucht, ein Präfix (Handler) aufzulösen, wenn es einen Punkt enthält. Wenn ein passender Handler existiert (z.B. `g_handler_l`), wird dieser ersetzt. Es verwaltet auch eine spezifische Logik für das Präfix `sas_lang_`.
Kopiert!
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 Codeblock
MACRO
Erklärung :
Definition des Makros `_version`. Es gibt 1 (wahr) zurück, wenn die aktuelle SAS-Version größer oder gleich der angeforderten Version ist, ansonsten 0 (falsch).
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright(c) 2015 coco, All Rights Reserved. / Copyright (c) 2001-2006 Rodney Sparapani