Documentos de Académico
Documentos de Profesional
Documentos de Cultura
macrosSAS 123
macrosSAS 123
MACRO EN
SAS
0. Introducción
0.1. ¿Qué es el lenguaje macro? (pg. 4)
1. Variables macro
1.1. Introducción (pg. 5)
1.2. Sintaxis (pg. 6)
1.3. Un primer uso (pg. 7)
1.4. Las variables macro (pg. 10)
1.4.1. Normas de uso (pg. 11)
1.4.2. La sentencia %LET (pg. 12)
1.4.3. Salida en Log (pg. 12)
1.4.4. Variables macro automáticas (pg. 15)
1.4.5. Ejemplos útiles (pg. 19)
1.5. Concatenación y referencias indirectas (pg. 20)
1.5.1. Tipos de concatenación (pg. 20)
1.5.2. Referencias indirectas (pg. 24)
1.6. Ámbito de las variables macro (pg. 26)
1.7. Destrucción de variables macro (pg. 28)
2. Programas macro
2.1. Introducción (pg. 31)
2.1.1. Sintaxis (pg. 31)
2.1.2. Paso de valores a programas macro (pg. 35)
2.1.3. Pequeñas herramientas para depurar (pg. 44)
2.2. Elementos y técnicas macro avanzadas (pg. 50)
Programas macro
El lenguaje macro en SAS es una herramienta implementada dentro del lenguaje SAS
con la que se puede:
Como mas adelante veremos, este token indica al preprocesador de SAS que se trata
de una sentencia correspondiente al lenguaje macro.
Una de las características que hace más versátil a este lenguaje es el poder
implementarse fuera de cualquier procedimiento SAS. Lo que permite potenciar de
una manera eficaz la ejecución de procedimientos a nuestro antojo.
Variables macro
Para la comprensión del término variable macro diremos que se trata de una
variable texto normal, la cual tiene un comportamiento similar a una variable
texto (string) del lenguaje SAS.
Las variables macro son una de las partes fundamentales de todo el lenguaje
macro, otorga una gran versatilidad a los programas y son fáciles de usar.
DATA PRUEBA;
DATALINES;
1 10
2 15
3 9
;
TITLE "PRODUCCIÓN DEL &DIA";
1 1 10
2 2 15
3 3 9
1.2. Sintaxis
Este tipo de variables deben de ser inicializadas antes de ser usadas. Para
hacerlo se deberá escribir la siguiente sentencia:
&nombrevariable;
Para poder empezar a vislumbrar el potencial que por ahora podemos sacar de
las variables macro se acompaña este capítulo de varios ejemplos:
DATA ALMACEN;
DATALINES;
1025 200 20
5612 150 5
4124 210 10
8496 200 5
7455 150 5
8499 500 9
5485 2 5
;
RUN;
%LET AX =6;
RUN;
La salida correspondiente:
Variables macro
Siguiendo con el ejemplo anterior, vemos que con cambiar solamente una vez el
valor de la variable AX, podemos modificar el aspecto de los dos gráficos al
mismo tiempo. Además vemos otro de los funcionamientos de las variables
macros además de la concatenación visto antes, la asignación.
DATA ALMACEN;
DATALINES;
1025 200 20
5612 150 5
4124 210 10
8496 200 5
7455 150 5
8499 500 9
5485 2 5
;
RUN;
%LET AX= 6;
%LET SEMAX= 10;
RUN;
QUIT;
Llegados a este capítulo ya tenemos unas nociones de los que son las variables
macro, de su uso y de sus posibles aplicaciones dentro de nuestros programas
SAS. Por lo que nos centraremos más en sus propiedades y características.
Como se dijo en un principio, las variables macro son variables texto, así es como
se almacenan en memoria. Veremos más adelante que existen formas de hacer
casting a otros tipos de datos (interger y punto flotante).
Si por ejemplo contiene un número que será usado en una operación
matemática, el procesador macro la convierte automáticamente en una variable
numérica. Se puede observar en el siguiente ejemplo. Pero no siempre ocurrirá
asi.
DATA VALORES;
INPUT X;
COEFICIENTE = X/ &VALOR;
DATALINES;
1
3
6
3
;
La salida resultante:
Obs X COEFICIENTE
Variables macro
1 1 0.1
2 3 0.3
3 6 0.6
4 3 0.3
Pero como vimos en ejemplos anteriores, el procesador macro también puede hacer
concatenaciones automáticas si la variable macro se usa por ejemplo dentro de un
string o en el nombre de un paso data como en el siguiente ejemplo:
DATA ALMACEN_DIA&DIA;
DATALINES;
1025 200 20
5612 150 5
4124 210 10
8496 200 5
;
PROC PRINT DATA = ALMACEN_DIA12;
RUN
Como todas las variables usadas en lenguajes de programación, las variables macro
tienen sus propias normas para ser nombradas, creadas y referenciadas dentro del
programa:
Las variables macro, no soportan el valor missing. En caso de que una variable macro
no contenga ningún valor, se considerará como un valor NULL.
Otra característica de la sentencia %LET, es que no asigna a las variables macro valores
en blanco, los omite.
Veamos un ejemplo con dos sentencias %LET, las cuales acaban asignando el mismo
valor NULL a las dos variables:
%LET NULO=;
%LET NULO= ;
Pero también omite los valores en blanco antes o después de otros valores:
%PUT
SYMBOLGEN
Estas sentencias son muy útiles para depurar los programas en busca de errores o
malas optimizaciones.
%PUT &nombrevariable;
Como se puede observar, la diferencia entre las dos sentencias es el token%. Como ya
veremos en el próximo capítulo, una gran cantidad de sentencias del lenguaje macro
se diferencian únicamente del lenguaje SAS convencional por esta precedidas del
token %.
Como se puede observar del ejemplo anterior, con la sentencia %PUT, no hace falta
encerrar el texto entre comillas, puesto que el procesador macro ya considera que
Variables macro
todo lo que vaya tras la sentencia %PUT hasta que se acabe la línea con el token punto
y coma, será texto. Las variables macro serán resueltas como texto automáticamente.
Con la sentencia %PUT también podemos realizar un escaneo de todas las variables
que componen un tipo determinado e imprimirlas en el LOG.
La sintaxis será:
_automatic_
_all_
_user_
_global_
_local_
De toda esta lista, cabe mencionar la opción _user_ la cual nos mostrara en el LOG
todas las variables macro creadas por el usuario.
Además de _automatic_ con un funcionamiento igual al anterior pero con las variables
automáticas que veremos más adelante.
Esta sentencia imprime en la ventana LOG todas las variables macro que se usen (salvo
cuando se use la sentencia &LET) en el programa, a diferencia de la sentencia %PUT en
la que se imprimen las que explícitamente se indiquen.
OPTIONS SUMBOLGEN;
OPTIONS NOSYMBOLGEN;
Variables macro
OPTIONS SYMBOLGEN;
RUN;
Son variables macro con información relativa al sistema donde esté instalada la
plataforma SAS, al propio sistema SAS y a la sesión SAS con la que se trabaje en ese
momento.
Variables macro
Cabe mencionar que no se puede crear ninguna variable con el nombre de alguna de
las variables automáticas, ni con palabras reservadas por el sistema SAS.
Por ejemplo:
SYS
SYSDAY
SIS
SISDAY
Permanentes
Semi-Permanentes
Editables
El primer tipo, son variables que contienen información del sistema, que se carga al
momento de iniciar la sesión SAS y que no cambian hasta que se cierra esta.
Algunas son:
Variable Descripción
SYSDATE Contiene la fecha de la sesión SAS, que
corresponde con la del sistema donde se
ejecute la plataforma. Está en formato
DATE7.
SYSDATE9 Igual que el anterior pero la fecha se
muestra en formato DATE9.
SYSDAY Devuelve el día en formato texto.
SYSVER Almacena la versión de la plataforma SAS.
SYSTIME Almacena el momento en el que se inició
la sesión SAS actual.
El segundo tipo lo forman las variables que al igual que las anteriores contienen
información del sistema, pero el propio sistema puede modificarlas durante la sesión.
Algunas son:
Variable Descripción
SYSERR Devuelve un código de los errores que se
puedan producir. Algunos valores son:
Variables macro
Algunas son:
Variable Descripción
SYSDNS Nombre del último data set creado en la
actual sesión SAS. Se almacena con un
espacio en blanco separando la librería y
el nombre del data set:
WORK PRUEBA
SYSLAST Igual que el anterior pero el carácter de
separación es un punto:
WORK.PRUEBA
escritura
Para terminar este apartado, se acompaña un ejemplo del uso de las variables macro
automáticas:
DATALINES;
1025 200 20
5612 150 5
4124 210 10
8496 200 5
;
TITLE "ALMACEN A FECHA: &SYSDATE";
PROC PRINT DATA = ALMACEN_&SYSDATE;
RUN;
Y la salida será:
1 1025 200 20
2 5612 150 5
3 4124 210 10
4 8496 200 5
Una forma bastante útil de dar provecho a las variables macro fuera de un programa
macro es usándolas como herramienta para ejecutar ciertas partes del programa de
una manera sencilla:
LIBNAME VV 'E:\';
El uso principal de las variables macro es la concatenación, ya sea con texto o con otras
variables macro.
Como hemos visto en ejemplos anteriores, para concatenar variables macro con texto
no hacía falta el uso de ningún comando concatenador. Pero existen circunstancias en
las que esto no es así.
El lenguaje macro permite tres tipos de situaciones al concatenar variables macro con
texto: