Manejo de Arreglos y Macro Variables en SAS.

Programacion SAS 2

{plusone} En la semana tuve la fortuna de trabajar en un requerimiento especial, obtener de manera estructurada información proveniente de un archivo txt, el cual contenía la extracción de unas 10 consultas SQL (diferentes tablas, diferente cantidad de campos), sin caracteres especiales de separación, con títulos, campos y anotaciones.

Para no hacer el cuento largo, en poco menos de tres horas resolví el problema para el archivo que se requería estructurar, en el proceso consulté con compañeros del trabajo sobre el manejo de arreglos y aquí les comparto lo aprendido.

 

Definir una macrovariable en tiempo de diseño.

Sintaxis: %LET MacroVariable = Valor;
Ejemplo1: Entidad9  = CDMX;
Ejemplo2: Entidad15 = EdoMex;

 

Definir una macrovariable en tiempo de ejecución.

sintaxis: call symputx('MacroVariable', DataCampo);
ejemplo:  call symputx('Genero', Sex);

 

Declaración de Arreglos de tipo texto.

sintaxis: array NombreVariable(NumeroPosiciones) $ <longitud> NombreVariable<1>-NombreVariable<NumeroPosiciones>;
ejemplo:  array Entidad(32) $ 40 Entidad1-Entidad32;

 

Declaración de Arreglos de tipo numérico.

sintaxis: array NombreVariable(NumeroPosiciones) NombreVariable<1>-NombreVariable<NumeroPosiciones>;
ejemplo:  array E(5) E1-E5;

 

Declaración de Arreglos con definición de valores.

sintaxis: array NombreVariable(NumeroPosiciones) NombreVariable<1>-NombreVariable<NumeroPosiciones> (<Lista de Valores>);
ejemplo1: array E(5)   E1-E5 (9 15 14 19 22);
ejemplo2: array G(2) $ G1 G2 ('M' 'F');

 

Referencia al valor de una macro variable.

Sintaxis: <Indicador Inicio>NombreMacrovariable<Indicador Final>
ejemplo:  &MacroVariable1.

 

Referencia a una macro variable compuesta.

sintaxis: <Indicador Inicio><Referencia Macrovariable 1><Referencia Macrovariable n><Indicador Final>
ejemplo: &&Entidad&Serie..

 

Sintaxis de un Ciclo Iterativo.

%DO <MacroVariable>  = <ValorInicio> %TO <ValorFin>;
 <Contenido Iterativo>
%END;

 

Ejemplo de un Ciclo Iterativo.

%DO Serie  = 1 %TO 32;
 TITLE1 "Ciudades de la Entidad &&Entidad&Serie..";
 PROC PRINT DATA = Ciudades; WHERE EntidadId = &Serie.;
%END;

 

Conocer el numero de registros en un data.

DATA _NULL_;
 SET <NombreData> nobs=n;
 CALL SYMPUTX('NombreMacrovariable',n);
 STOP;
RUN;

 

Ejemplo para conocer el numero de registros en un data.

DATA _NULL_;
 SET Ciudadanos nobs=n;
 CALL SYMPUTX('NumRegistros',n);
 STOP;
RUN;

 

¿Cuando tienes oro molido, lo compartes?