LENGUAJE MACRO EN SAS

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

171 downloads 270 Views 1MB Size

Recommend Stories


MICROPAVIMENTO INDECO ASOCIADOS SAS
MICROPAVIMENTO MANTENIMIENTO VIAL PREVENTIVO INDECO ASOCIADOS SAS Calle124 15-29 Ofc. 412 Tel:(57) 1- 214 48 37 BOGOTA, CO [email protected] h

Diplomado en Minería de Datos con SAS
INSTITUTO MATEMÁTICO Y ACTUARIAL MEXICANO Diplomado en Minería de Datos con SAS PERÍODO 2016-1 ¿Por qué es importante la Minería de Datos? 2 La Mi

Story Transcript

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

Programas macro

2. Programas macro

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.

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

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;

PRODUCCIÓN DEL LUNES Obs 1 2 3

PERSONA 1 2 3

PIEZAS 10 15 9

Carlos Romojaro Rincón

Variables macro

La salida de este programa será:

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

Variables macro

El procesador macro, resolverá la variable como un valor texto y lo unirá si este está acompañando un texto u otras sentencias.

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;

Variables macro

La salida correspondiente:

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;

La salida en este caso será:

Carlos Romojaro Rincón

Variables macro

QUIT;

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:

1 2 3 4

X 1 3 6 3

COEFICIENTE 0.1 0.3 0.6 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

Variables macro

Obs

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.  Su uso está sujeto a normas de ámbito.  No pueden contener como nombre caracteres reservados por el sistema.

Carlos Romojaro Rincón

Variables macro

      

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.

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

Variables macro

1.4.3 Salida en Log

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;

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

Variables macro

%PUT INFORME A FECHA: &FECHA

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:

RUN;

Variables macro

OPTIONS NOSYMBOLGEN;

Carlos Romojaro Rincón

14

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

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

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

Variables macro

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.

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 SYSDATE

SYSDATE9 SYSDAY SYSVER SYSTIME

Descripción Contiene la fecha de la sesión SAS, que corresponde con la del sistema donde se ejecute la plataforma. Está en formato DATE7. Igual que el anterior pero la fecha se muestra en formato DATE9. Devuelve el día en formato texto. Almacena la versión de la plataforma SAS. 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:

Carlos Romojaro Rincón

Descripción Devuelve un código de los errores que se puedan producir. Algunos valores son: 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

Variables macro

Variable SYSERR

16

cancelada por el propio usuario por un comando ATTN o BREAK. 3

SYSLIBRC

Error producido en modo no interactivo o en ejecución por lotes.

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 SYSDNS

SYSLAST

Descripción 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 Igual que el anterior pero el carácter de separación es un punto: WORK.PRUEBA

Permisos

Variable

Permisos

Variable

Lectura y escritura

SYSBUFFR

Lectura y escritura

SYSPARM

Lectura y escritura

SYSCC

Lectura y escritura

SYSPBUFF

Lectura y escritura

SYSCMD

Lectura y escritura

SYSRC

Lectura y escritura

SYSDEVIC

Solo lectura

SYSCHARWIDTH

Carlos Romojaro Rincón

Variables macro

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:

17

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 ME

Solo lectura

SYSMENV

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

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

Carlos Romojaro Rincón

Variables macro

Permisos

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

1 2 3 4

1025 5612 4124 8496

200 150 210 200

SEMANA 20 5 10 5

1.4.5 Ejemplos útiles

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

Variables macro

ALMACEN A FECHA: 01JAN12 Obs PROVEEDOR PIEZAS

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.

1.5.1.

Tipos de concatenación

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

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

20

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.