SAS tiene una potente función de programación llamada Macros lo que nos permite evitar secciones repetitivas de código y usarlas una y otra vez cuando sea necesario. También le ayuda a crear variables dinámicas en su código que pueden tomar diferentes valores para diferentes instancias del mismo código. Las macros también se pueden declarar para bloques de código que se reutilizarán una y otra vez de la misma manera que las variables de macro. Los veremos a ambos en los ejemplos a continuación.
Estas son variables que contienen un valor que será utilizado una y otra vez por el programa SAS. Se declaran al comienzo de un programa SAS y se llaman más tarde en el cuerpo del programa. Pueden tener un alcance global o local.
Se denominan macro variables globales porque se puede acceder a ellas mediante cualquier programa SAS disponible en el entorno SAS. Normalmente, se trata de variables asignadas por el sistema a las que tienen acceso varios programas. Un ejemplo común es la fecha del sistema.
El siguiente es un ejemplo de la variable SAS SYSDATE que representa la fecha del sistema. Considere un escenario que imprime la fecha del sistema en el encabezado de un informe SAS todos los dÃas que se genera el informe. El encabezado mostrará la fecha y el dÃa actuales sin codificar ningún valor para ellos. Estamos utilizando un 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 el siguiente resultado.
Se puede acceder a estas variables mediante programas SAS en los que se declaran como parte del programa. Por lo general, se usan para pasar diferentes variables a las mismas declaraciones sl de SAS para que puedan manejar diferentes observaciones de un conjunto de datos.
Las variables locales están marcadas con la siguiente sintaxis.
% LET (Macro Variable Name) = Value;
Aquà el campo «Valor» puede tomar cualquier valor numérico, textual o fecha de acuerdo con los requisitos del programa. Un nombre de variable macro es cualquier variable SAS válida.
Las declaraciones SAS utilizan variables mediante Y se agrega un sÃmbolo al principio del nombre de la variable. A continuación el programa nos da todas las observaciones de la marca Audi y del tipo Sport. Si queremos obtener el resultado diferentes marcas, necesitamos cambiar el valor de la variable make_name sin cambiar ninguna otra parte del programa. En el caso de los programas de división de palabras, se puede hacer referencia a esta variable una y otra vez en cualquier declaración 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 el mismo resultado que el programa anterior. Pero cambiemos escribe un nombre a ‘Vagón de ferrocarril’ y ejecute el mismo programa. Obtendremos el siguiente resultado.
Una macro es un grupo de sentencias SAS a las que se hace referencia por su nombre y que se pueden utilizar en cualquier lugar de un programa con ese nombre. Comienza con la instrucción% MACRO y termina con la instrucción% MEND.
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);
El programa siguiente decora un grupo de redes SAT bajo una macro llamada ‘Mostrar resultado’; Esta macro es 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 se ejecuta el código anterior, obtenemos el siguiente resultado.
SAS tiene muchas declaraciones MACRO integradas en el lenguaje de programación SAS. Son utilizados por otros programas SAS sin declararlos explÃcitamente. Los ejemplos tÃpicos son: la terminación del programa cuando se cumple una determinada condición o la fijación del valor del tiempo de ejecución de una variable en el registro del programa. A continuación se muestran algunos ejemplos.
Esta instrucción de macro escribe información sobre un texto o una variable de macro en el registro de SAS. En el siguiente ejemplo, el valor de la variable «hoy» 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 el siguiente resultado.
La ejecución de esta macro provoca la finalización normal de la macro que se está ejecutando actualmente cuando la condición especificada se evalúa como verdadera. En el siguiente ejemplo, cuando el valor de la variable «eje» se convierte en 10, la macro finaliza; 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 el siguiente resultado.
Esta macrodefinición contiene % HACER MIENTRAS un bucle que termina como se requiere con una instrucción% END. En el siguiente ejemplo, una macro llamada prueba toma la entrada del usuario e inicia un bucle DO usando esa entrada. El final del bucle DO se alcanza con el operador% end, y el final de la macro se alcanza con el operador% 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 el siguiente resultado.
🚫