SAS tiene una poderosa característica de programación llamada Macros que nos permite evitar secciones repetitivas de código y utilizarlas una y otra vez cuando sea necesario. También ayuda a crear variables dinámicas dentro del código que pueden tomar diferentes valores para diferentes instancias de ejecución del mismo código. Las macros también pueden ser declaradas para bloques de código que serán reutilizados múltiples veces de manera similar a las variables de macro. Veremos ambos en los siguientes ejemplos.
Variables macro
Son las variables que mantienen un valor para ser utilizado una y otra vez por un programa SAS. Se declaran al principio de un programa SAS y se llaman más tarde en el cuerpo del programa. Pueden ser de ámbito Global o Local.
Variable Macro Global
Se llaman variables macro globales porque pueden ser accedidas por cualquier programa SAS disponible en el entorno SAS. En general son las variables asignadas por el sistema a las que acceden múltiples programas. Un ejemplo general es la fecha del sistema.
Ejemplo
A continuación se muestra un ejemplo de la variable SAS llamada SYSDATE que representa la fecha del sistema. Considere un escenario para imprimir la fecha del sistema en el título del informe SAS cada día que se genera el informe. El título mostrará la fecha y el día actuales sin que codifiquemos ningún valor para ellos. Utilizamos el conjunto de datos SAS incorporado llamado CARS disponible en la biblioteca SASHELP.
proc print data = sashelp.cars;where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE";run;
Cuando se ejecuta el código anterior obtenemos la siguiente salida.
Variable Macro Local
Estas variables pueden ser accedidas por los programas SAS en los que se declaran como parte del programa. Normalmente se utilizan para suministrar diferentes varaibeles a las mismas sentencias SAS sl que pueden procesar diferentes observaciones de un conjunto de datos.
Sintaxis
Las variables locales se decalan con la siguiente sintaxis.
% LET (Macro Variable Name) = Value;
Aquí el campo Valor puede tomar cualquier valor numérico, de texto o de fecha según lo requiera el programa. El nombre de la variable Macro es cualquier variable SAS válida.
Ejemplo
Las variables son utilizadas por las sentencias SAS utilizando el carácter & añadido al principio del nombre de la variable. El siguiente programa nos da todas las observaciones de la marca ‘Audi’ y del tipo ‘Sports’. En el caso de que queramos el resultado de otra marca, debemos cambiar el valor de la variable nombre_marca sin cambiar ninguna otra parte del programa. En el caso de traer programas esta variable puede ser referida una y otra vez en cualquier sentencia SAS.
%LET make_name = 'Audi';%LET type_name = 'Sports';proc print data = sashelp.cars;where make = &make_name and type = &type_name ; TITLE "Sales as of &SYSDAY &SYSDATE";run;
Cuando se ejecuta el código anterior obtenemos la misma salida que el programa anterior. Pero cambiemos el nombre del tipo a ‘Wagon’ y ejecutemos el mismo programa. Obtendremos el siguiente resultado.
Programas Macro
El macro es un grupo de sentencias SAS que se refiere por un nombre y para utilizarlo en el programa en cualquier lugar, utilizando ese nombre. Comienza con una sentencia %MACRO y termina con la sentencia %MEND.
Sintaxis
Las variables locales se declaran con la siguiente sintaxis.
# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);
Ejemplo
El siguiente programa decalres un grupo de staemnets SAT bajo una macro llamada ‘show_result’; Esta macro está siendo llamada por otras sentencias SAS.
%MACRO show_result(make_ , type_);proc print data = sashelp.cars;where make = "&make_" and type = "&type_" ;TITLE "Sales as of &SYSDAY &SYSDATE";run;%MEND;%show_result(BMW,SUV);
Cuando el código anterior se ejecuta obtenemos la siguiente salida.
Macros de uso común
SAS tiene muchas sentencias MACRO que están incorporadas en el lenguaje de programación SAS. Son utilizadas por otros programas SAS sin declararlas explícitamente.Ejemplos comunes son: terminar un programa cuando se cumple alguna condición o capturar el valor en tiempo de ejecución de una variable en el registro del programa. A continuación se muestran algunos ejemplos.
Macro %PUT
Esta sentencia de macro escribe información de texto o variable de macro en el registro de SAS. En el siguiente ejemplo el valor de la variable ‘today’ se escribe en el registro del programa.
data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;
Cuando se ejecuta el código anterior obtenemos la siguiente salida.
Macro %RETURN
La ejecución de esta macro provoca la terminación normal de la macro que se está ejecutando cuando cierta condición se evalúa como verdadera. En el siguiente ejemplo, cuando el valor de la variable «val» se convierte en 10, la macro termina, de lo contrario, continúa.
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
Cuando se ejecuta el código anterior, obtenemos la siguiente salida.
Macro %END
Esta definición de macro contiene un bucle %DO %WHILE que termina, como es necesario, con una sentencia %END. En el siguiente ejemplo la macro llamada test toma una entrada del usuario y ejecuta el bucle DO utilizando este valor de entrada.El final del bucle DO se logra a través de la sentencia %end mientras que el final de la macro se logra a través de la sentencia %mend.
%macro test(finish); %let i = 1; %do %while (&i <&finish); %put the value of i is &i; %let i=%eval(&i+1); %end;%mend test;%test(5)
Cuando se ejecuta el código anterior obtenemos la siguiente salida.