Está en la página 1de 20

LENGUAJE

MACRO EN
SAS

Carlos Romojaro Rincón


INDICE

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

2.2.1. Funciones macro (pg. 51)


2.2.1.1. Creación de funciones macro. (pg. 56)
2.2.2. Sentencias automatizadas (pg. 57)
2.2.2.1. Selectivas (pg. 59)
2.2.2.2. Iterativas (pg. 62)
2.2.3. Almacenamiento permanente de programas macro (pg. 64)

Carlos Romojaro Rincón 3


¿Qué es el lenguaje macro?

El lenguaje macro en SAS es una herramienta implementada dentro del lenguaje SAS
con la que se puede:

 Crear código reutilizable fácilmente.


 Pasar información entre diferentes pasos en SAS.
 Potenciar el código mediante sentencias iterativas y condicionales.
 Reducir considerablemente la cantidad de código del programa.

El lenguaje macro se compone de su propia sintaxis en la que los tonkens por


excelencia son:

 % para indicar al procesador que se trata de una sentencia macro.


 & para indicar al procesador el uso de una variable macro ya creada.

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

Carlos Romojaro Rincón 4


1.1. Introducción a las 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.

La sintaxis general para el uso de una variable macro será:

%LET DIA = LUNES;

DATA PRUEBA;

INPUT PERSONA PIEZAS;

DATALINES;
1 10
2 15
3 9
;
TITLE "PRODUCCIÓN DEL &DIA";

PROC PRINT DATA = PRUEBA;


RUN;

La salida de este programa será:


Variables macro

PRODUCCIÓN DEL LUNES

Obs PERSONA PIEZAS

1 1 10
2 2 15
3 3 9

Carlos Romojaro Rincón 5


Hemos visto en el ejemplo anterior que el procesador macro concatena dentro
de un string la variable macro indicada.
Este es uno de los funcionamientos de las variables macros, aunque tiene más,
que se explicaran detalladamente más adelante.

1.2. Sintaxis
Este tipo de variables deben de ser inicializadas antes de ser usadas. Para
hacerlo se deberá escribir la siguiente sentencia:

%LET nombrevariable<= valor>;

Nombrevariable es un valor obligatorio y valor es un parámetro opcional.

Por otro lado, el uso de la misma se realiza de la siguiente forma:

&nombrevariable;

Con la sentencia anterior se le indica al procesador macro que quiere usarse


esa variable.

El procesador macro, resolverá la variable como un valor texto y lo unirá si este


está acompañando un texto u otras sentencias.
Variables macro

Carlos Romojaro Rincón 6


1.3. Un primer uso de las variables macro

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;

INPUT PROVEEDOR PIEZAS SEMANA;

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;

PROC CHART DATA=ALMACEN;


VBAR PIEZAS /AXIS=&AX;

PROC CHART DATA=ALMACEN;


VBAR SEMANA /AXIS=&AX;

RUN;

La salida correspondiente:

Variables macro

Carlos Romojaro Rincón 7


En este ejemplo hemos usado la variable macro AX en varios procedimientos
diferentes. Esto es una de las grandes virtudes de las variables macro, puesto
que nos permite compartir la misma variable en multitud de procedimientos
diferentes que no permiten ni el uso de variables convencionales.

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.

Veamos otro ejemplo:

DATA ALMACEN;

INPUT PROVEEDOR PIEZAS SEMANA;

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;

PROC CHART DATA=ALMACEN;


VBAR PIEZAS /AXIS=&AX;
WHERE SEMANA < &SEMAX;

PROC CHART DATA=ALMACEN;


VBAR SEMANA /AXIS=&AX;
WHERE SEMANA < &SEMAX;

RUN;

QUIT;

La salida en este caso será:


Variables macro

Carlos Romojaro Rincón 8


Variables macro

Carlos Romojaro Rincón 9


1.4. Las variables macro

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.

%LET VALOR = 10;

DATA VALORES;
INPUT X;
COEFICIENTE = X/ &VALOR;

DATALINES;
1
3
6
3
;

PROC PRINT DATA=VALORES;


RUN;

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:

Carlos Romojaro Rincón 10


%LET DIA = 12;

DATA ALMACEN_DIA&DIA;

INPUT PROVEEDOR PIEZAS SEMANA;

DATALINES;
1025 200 20
5612 150 5
4124 210 10
8496 200 5
;
PROC PRINT DATA = ALMACEN_DIA12;
RUN

1.4.1. Normas de uso

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:

 El nombre no puede empezar por un valor numérico.


 El nombre no puede superar 32 caracteres.
 La variable tiene una capacidad de 65 Kbytes.
 Pueden ser referenciadas en cualquier parte del código.
 El token para declararla y modificarla es %LET
 El token para referenciarla es &
 Si se quieren concatenar dentro de un texto, este debe estar encerrado entre
comillas dobles.
 No se pueden asignar valores a las variables macro automáticas.
Variables macro

 Su uso está sujeto a normas de ámbito.


 No pueden contener como nombre caracteres reservados por el sistema.

Carlos Romojaro Rincón 11


1.4.2 La sentencia %LET
La sentencia %LET nos permite definir variables y modificar su valor. Es una sentencia
perteneciente al código macro, por lo que solo la ejecutará el procesador macro.

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:

%LET VARIABLE= PRUEBA;

%LET NULO= PRUEBA ;

En caso de que queramos por cualquier motivo almacenar valores en blanco, es


necesario recurrir a funciones quoting que serán explicadas en el próximo capítulo.

1.4.3 Salida en Log


Variables macro

Este tipo de variables, cuando se usan dentro de un paso data, no se imprimen en la


ventana OUTPUT como ocurre con las variables convencionales de SAS. Por lo que si
queremos que se impriman en esta ventana deberá ser asignándoselas primeramente
a una variable convencional de SAS.

No obstante, habrá ocasiones donde nos interese que la información se imprima en la


ventana Log. A continuación se explican los procedimientos para hacerlo con lenguaje
macro.

Carlos Romojaro Rincón 12


Tenemos dos opciones:

 %PUT
 SYMBOLGEN

Ambas sentencias no necesitan estar dentro de un procedimiento para que funcionen,


basta con que estén dentro del programa a ejecutar.

Estas sentencias son muy útiles para depurar los programas en busca de errores o
malas optimizaciones.

La sentencia %PUT, tiene el mismo comportamiento que su homóloga en código SAS


convencional, la sentencia PUT.

La sintaxis por lo tanto será de la siguiente forma:

%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 %.

A continuación vemos un ejemplo del uso de la sentencia %PUT:

%LET FECHA = 17/06/2012;

%PUT INFORME A FECHA: &FECHA

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á:

Carlos Romojaro Rincón 13


En primer lugar la sentencia %PUT, seguida de alguna de estas opciones:

 _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.

Otra sentencia que nospermitirá imprimir información en la ventana LOG será la


sentencia SYMBOLGEN.

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.

La sintaxis es muy sencilla, y simplemente hay que poner la siguiente sentencia, a


partir de la cual la opción symbolgen estará activada:

OPTIONS SUMBOLGEN;

Para deshabilitar la opción symbolgen y que dejen de aparecer las variables en la


ventana LOG, basta con escribir la siguiente sentencia:

OPTIONS NOSYMBOLGEN;
Variables macro

A continuación vemos un ejemplo:

%LET FECHA = 18/06/2012;


%LET NOMBRE = CARLOS;

OPTIONS SYMBOLGEN;

%PUT HOY ES &FECHA;


%PUT MI NOMBRE ES &NOMBRE

RUN;

Carlos Romojaro Rincón 14


La salida en la ventana LOG es:

1 %LET FECHA = 18/06/2012;


2 %LET NOMBRE = CARLOS;
3
4 OPTIONS SYMBOLGEN;
5
6 %PUT HOY ES &FECHA;
SYMBOLGEN: La macro variable FECHA se resuelve en 18/06/2012
HOY ES 18/06/2012
7 %PUT MI NOMBRE ES &NOMBRE
SYMBOLGEN: La macro variable NOMBRE se resuelve en CARLOS
8
9 RUN;

1.4.4 Variables macro automáticas

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

Carlos Romojaro Rincón 15


Hay tres tipos de variables macro automáticas:

 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

0 La ejecución del programa se


realizó con éxito.
1 La ejecución del programa fue
cancelada por el propio usuario
por una sentencia RUN
CANCEL.
2 La ejecución del programa fue

Carlos Romojaro Rincón 16


cancelada por el propio usuario
por un comando ATTN o
BREAK.
3 Error producido en modo no
interactivo o en ejecución por
lotes.
SYSLIBRC Devuelve el código de la última librería
creada en la actual sesión SAS.

El tercer tipo de variables automáticas lo componen variables creadas por el sistema


SAS, pero que pueden ser editadas por el usuario durante la sesión SAS.

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

La lista de variables macro automáticas es muy extensa, a continuación se muestra una


lista con algunas más relevantes, en este caso clasificadas según su permiso de
escritura:

Permisos Variable Permisos Variable

Lectura y escritura SYSBUFFR Lectura y SYSPARM


Variables macro

escritura

Lectura y escritura SYSCC Lectura y SYSPBUFF


escritura

Lectura y escritura SYSCMD Lectura y SYSRC


escritura

Lectura y escritura SYSDEVIC Solo lectura SYSCHARWIDTH

Carlos Romojaro Rincón 17


Permisos Variable Permisos Variable

Lectura y escritura SYSDMG Solo lectura SYSDATE

Lectura y escritura SYSDSN Solo lectura SYSDATE9

Lectura y escritura SYSFILRC Solo lectura SYSDAY

Lectura y escritura SYSLAST Solo lectura SYSENCODING

Lectura y escritura SYSLCKRC Solo lectura SYSENV

Lectura y escritura SYSLIBRC Solo lectura SYSERR

Lectura y escritura SYSLOGAPPLNAME Solo lectura SYSERRORTEXT

Lectura y escritura SYSMSG Solo lectura SYSHOSTNAME

Solo lectura SYSSCPL Solo lectura SYSINFO

Solo lectura SYSSTARTID Solo lectura SYSJOBID

Solo lectura SYSSTARTNAME Solo lectura SYSMACRONAME

Solo lectura SYSTCPIPHOSTNA Solo lectura SYSMENV


ME

Solo lectura SYSTIME Solo lectura SYSNCPU

Solo lectura SYSUSERID Solo lectura SYSODSPATH

Solo lectura SYSVER Solo lectura SYSPROCESSID

Solo lectura SYSVLONG Solo lectura SYSPROCESSNAME

Solo lectura SYSVLONG4 Solo lectura SYSPROCNAME

Solo lectura SYSWARNINGTEXT Solo lectura SYSSCP

Solo lectura SYSINDEX Solo lectura SYSSITE


Variables macro

Para terminar este apartado, se acompaña un ejemplo del uso de las variables macro
automáticas:

Carlos Romojaro Rincón 18


DATA ALMACEN_&SYSDATE;

INPUT PROVEEDOR PIEZAS SEMANA;

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á:

ALMACEN A FECHA: 01JAN12


Obs PROVEEDOR PIEZAS SEMANA

1 1025 200 20
2 5612 150 5
3 4124 210 10
4 8496 200 5

1.4.5 Ejemplos útiles


Variables macro

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:

Carlos Romojaro Rincón 19


%LET COMENINI1= * ;
%LET COMENINI2= / ;
%LET COMENFIN= /* ;

LIBNAME VV 'E:\';

&COMENINI1.&COMENINI2 DATA ESTUDIOHOMBRES;


SET VV.HOMBRES;
&COMENFIN RUN;

&COMENINI1.&COMENINI2 PROC FREQ DATA=ESTUDIOHOMBRES;


TABLES CINE;
&COMENFIN RUN;

En el capitulo 2 se verá una forma mas sencilla de hacer esto.

1.5. Concatenación y referencias indirectas

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í.

1.5.1. Tipos de concatenación


Variables macro

El lenguaje macro permite tres tipos de situaciones al concatenar variables macro con
texto:

 Texto antes de la variable macro


 Texto después de la variable macro
 Varias variables macros seguidas

Carlos Romojaro Rincón 20

También podría gustarte