Publicado el :
Macro CREACION_INTERNA

Macros de gestión de nombres canónicos y versionado

Este código también está disponible en: Deutsch English Français
Este código fuente define principalmente la macro `%canonicalname` que permite resolver nombres abreviados (ej: `l.start`) en nombres completos (ej: `sas©_log_start`) basándose en variables macro globales de tipo `g_handler_`. También incluye el contenido de la macro `_version` que compara la versión del sistema SAS© (`&sysver`) con una versión requerida pasada como parámetro.
Análisis de datos

Type : CREACION_INTERNA


El código no manipula tablas de datos (datasets). Realiza únicamente operaciones sobre cadenas de caracteres y variables macro.

1 Bloque de código
MACRO
Explicación :
Definición de la macro `canonicalname`. Toma como entrada un nombre, lo limpia (minúsculas, eliminación de espacios) e intenta resolver un prefijo (manejador) si contiene un punto. Si existe un manejador coincidente (ej: `g_handler_l`), se sustituye. También gestiona una lógica específica para el prefijo `sas_lang_`.
¡Copiado!
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 Bloque de código
MACRO
Explicación :
Definición de la macro `_version`. Devuelve 1 (verdadero) si la versión actual de SAS es mayor o igual a la versión solicitada como argumento, de lo contrario 0 (falso).
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright(c) 2015 coco, All Rights Reserved. / Copyright (c) 2001-2006 Rodney Sparapani