Você está na página 1de 25

7 Capitulo: Contiol ue flujo en SAS

SAS dispone de dos tipos de sentencias de control de flujo, las sentencias


condicionales y las sentencias de bucles o de repeticin.
7.1. Sentencias condicionales:
Sentencia IF-THEN-ELSE
La sentencia principal de bifurcacin en SAS es la sentencia IF-THEN-ELSE cuya
sintaxis es:
IF (expresin) THEN sentencias ejecutables;
ELSE sentencias ejecutables;
Si la condicin de la expresin es cierta, se ejecutarn las sentencias posteriores a
THEN, continuando despus el curso del programa, salvo las sentencias del ELSE.
Si la condicin es falsa, se ejecutarn las sentencias del ELSE, continuando despus
el curso del programa. Si no hay ELSE, se continuar en la sentencia siguiente.
Ejemplo 1: Trabajando con el fichero 'Work.Campamento', borrar de la memoria los
casos en los que edad<15:
DATA Campamento;
INPUT Nombre $ 9. Edad Nota Sexo $;
DATALINES;
Manuel 16 6.8 M
Elena 13 6.2 F
Rosa 17 5.9 F
M. Flavia 18 7.0 F
Prudencio 14 5.9 M
Casimira 15 8.7 F
;
PROC PRINT;
RUN;
/* Eliminacin de los casos con edad menor que 15 */
DATA uno;
SET Campamento;
IF edad<15 THEN DELETE;
OUTPUT;
run;
PROC PRINT DATA=uno;
RUN;
El cdigo anterior se puede simplificar,
DATA dos;
SET Campamento;
IF edad<15 THEN DELETE; /*Eliminamos la sentencia OUTPUT*/
run;
PROC PRINT DATA=dos;
TITLE 'Este es el fichero dos';
Statistical Analysis System DATA
-1 -

RUN;
Y todava se puede simplificar ms.
DATA tres;
SET Campamento;
IF edad >= 15 ; /*Eliminamos la sentencia OUTPUT, DELETE y la
clausula THEN*/
RUN;
PROC PRINT DATA=tres;
TITLE 'Este es el fichero tres';
RUN;

Ejemplo 2: Crear dos archivos (Cam_M y Cam_F) para separar los casos masculinos
de los femeninos.
/* Creacin de dos ficheros para clasificar a hombres y mujeres */
DATA Cam_M Cam_F; /*Creamos dos ficheros temporales*/
SET Campamento;
IF Sexo = 'M' THEN OUTPUT Cam_M ;
ELSE OUTPUT CAM_F;
RUN;
PROC PRINT DATA=Cam_M;
TITLE 'Este es el fichero de hombres';
RUN;
PROC PRINT DATA=Cam_F;
TITLE 'Este es el fichero de mujeres';
RUN;

En los dos ejemplos anteriores tanto si se cumple la expresin como si se va a la
clausula THEN hay una nica sentencia que ejecutar. Cuando se necesita ejecutar
ms de una sentencia hay que encerrar el conjunto de sentencias entre la estructura,
DO;
Sentencia1;
Sentencia2;
. ;
END;


Statistical Analysis System DATA
-2 -

Ejemplo 3: Trabajando con el archivo de datos 'Work.Alumnos', se pide:
a) Calcular el ndice de masa corporal y expresar la altura en metros.
b) Clasificar a los alumnos en funcin del ndice anteriormente calculado.
c) Separa los casos en diferentes DataSet en funcin de su IMC.
El fichero Alumnos es,
DATA Alumnos;
INPUT Nombre $ 9. Edad Nota Sexo $ Peso Altura;
DATALINES;
Manuel 16 6.8 M 78.5 180
Elena 13 6.2 F 56.9 175
Rosa 17 5.9 F 72.4 172
M. Flavia 18 7.0 F 60.3 165
Prudencio 14 5.9 M 79.1 171
Casimira 15 8.7 F 57.6 158
;
PROC PRINT;
RUN;

El ndice de masa corporal (IMC) se calcula segn la formula siguiente:
IHC =
moso (cn kg)
cstoturo
2
(cn m)

Segn la OMS la clasificacin primaria es:
IMC Clasificacin
<18,50 Infrapeso
18,50 - 24,99 Normal
25 29,99 Sobrepeso
30 Obeso






Statistical Analysis System DATA
-3 -

/* Creacin, clasificacin y separacin en diferentes DataSet */
DATA Infra Normal Sobre Obeso;
SET Alumnos;
IMC = Peso/(Altura/100)**2;
IF IMC < 18.5 THEN DO;
Altura_m = Altura / 100;
OUTPUT Infra;
END;
ELSE IF 18 <IMC < 24.9 THEN DO;
Altura_m = Altura / 100;
OUTPUT Normal;
END;
ELSE IF 125 < = IMC < 30 THEN DO;
Altura_m = Altura / 100;
OUTPUT Sobre;
END;
ELSE DO;
Altura_m = Altura / 100;
OUTPUT Obeso;
END;

RUN;

Sentencia: DO; sentencias END;
Ejemplo 4:
data dos;
set uno;
if edad<15 then do;
edad=edad+7;
tasa=altura/edad;
end;
else do;
edad=edad-5;
tasa=altura/edad -4;
end;
run;


Statistical Analysis System DATA
-4 -

Sentencia if var in (val1, val2,...,valn)
La sentencia if var in (val1, val2,...,valn) es una forma abreviada de la sentencia If-
then-else completa. Su sintaxis es:
if var in (val1, val2,...,valn)
donde,
var es una variable
val1, , valn son los posibles valores que puede tomar.
La condicin es cierta si la variable var toma alguno de los valores de la lista
val1,,valn y falsa si no toma ninguno de ellos. Si la variable es alfanumrica los
valores se escriben entre comillas.
Ejemplo 5: Trabajando con el fichero 'Work.Campamento', seleccionar los casos
masculinos.
DATA Campamento;
INPUT Nombre $ 9. Edad Nota Sexo $;
DATALINES;
Manuel 16 6.8 M
Elena 13 6.2 F
Rosa 17 5.9 F
M. Flavia 18 7.0 F
Prudencio 14 5.9 M
Casimira 15 8.7 F
;
PROC PRINT;
RUN;

/* Realizamos la seleccin*/
DATA Masculino;
SET Campamento;
If Sexo IN ('M'); /* Como la variable es alfanumrica los valores van
entre comillas */
PROC PRINT DATA = Masculino;
Title 'Solo hombres';
RUN;


Ejemplo 6: Conservar los datos de individuos que no sean ingleses ni franceses
data datos2;
set datos;
if pais in ('inglat', 'francia') then delete;
run;


Statistical Analysis System DATA
-5 -

Sentencia IF expresion;
Hace que el programa slo contine procesando las observaciones que cumplan la
expresin. Si la observacin no la cumple, en control pasa a la lnea posterior a data,
sin grabarla en el archivo de salida.
data uno;
set dos;
if edad<15;
output;
run;

Sentencia SELECT.
SELECT (expresin);
WHEN (expresin) sentencias;
...
OTHERWISE sentencias;
END;
La expresin no es una condicin, sino una frmula que da lugar a un valor (numrico
o alfanumrico).
Modo de proceder:
Se evala la expresin del primer WHEN. Si da el mismo resultado que la
expresin del SELECT, se ejecutan las sentencias correspondientes (incluyen
DO;END). Si no, se pasa al siguiente WHEN.
Si en ninguno de los WHEN coincide el valor de su expresin con el de la
expresin de SELECT se ejecutan las sentencias del OTHERWISE.
Si en este caso no se ha puesto OTHERWISE da error. Es conveniente, pues,
poner siempre OTHERWISE;
Ejemplo 7: Tenemos un archivo con el ao, ingresos y gastos de una institucin
sospechosa de corrupcin.
Queremos repartir en distintos archivos las observaciones que provienen de
aos diferentes. El ao de las obs. viene en la variable tiempo, en el archivo uno.
data anterio period1 period2 period3 period4 period5;
set uno;
select (tiempo);
when (1989) output period1;
Statistical Analysis System DATA
-6 -

when (1990) output period2;
when (1991) output period3;
when (1992) output period4;
when (1993) output period5;
otherwise output anterio;
end;
run;
Se pueden anidar los SELECT. Si en el ejemplo anterior queremos distribuir tambin
segn los meses:
Ejemplo 7:
data ant per1mes1 per1mes2...;
set uno;
select (tiempo);
when (1989) do;
select (mes);
when ('enero') output per1mes1;
when...
...
otherwise;
end;
when...
...
otherwise output ant;
end;

Statistical Analysis System DATA
-7 -

Ejemplo 8:
** A partir de un grupo de variables crea una variable dummy **;
data classdata;
input seccion puntos @@;
seccion1 = 0; seccion2 = 0; seccion3 = 0; seccion4 = 0;
select (section);
when (1) seccion1 = 1;
when (2) seccion2 = 1;
when (3) seccion3 = 1;
when (4) seccion4 = 1;
otherwise put seccion=;
end;
datalines;
1 58 1 36 1 87 1 78 1 89 1 67
2 76 2 94 2 64 2 84 2 96 2 47
3 75 3 74 3 86 3 91 3 76 3 84
4 81 4 67 4 97 4 31 4 89 4 67
;

proc print data=classdata;
run;

Statistical Analysis System DATA
-8 -


Ejemplo 9: Clasificar los resultados de un conjunto de alumnos.
data grades;
input id section score @@;
if score ge 90 then grade = "A";
else if score ge 80 then grade = "B";
else if score ge 70 then grade = "C";
else if grade ge 60 then grade = "D";
else if score ne . then grade = "F";

select;
when (score ge 93) plusminus = "A";
when (score ge 90) plusminus = "A-";
when (score ge 88) plusminus = "B+";
when (score ge 83) plusminus = "B";
when (score ge 80) plusminus = "B-";
when (score ge 78) plusminus = "C+";
when (score ge 73) plusminus = "C";
when (score ge 70) plusminus = "C-";
when (score ge 68) plusminus = "D+";
when (score ge 63) plusminus = "D";
when (score ge 60) plusminus = "D-";
when (score ne . ) plusminus = "F";
otherwise;
end;
label id = "Student ID number"
section = "Class section number"
score = "Exam score"
grade = "Traditional grade"
plusminus = "Plus/Minus grade"
;
datalines;
811 1 85 138 1 95 137 1 75 642 1 94 134 1 88 466 1 84 258 1 36 733 1
86 844 1 69
131 2 84 336 2 76 541 2 79 951 2 79 348 2 94 846 2 64 187 2 96 976 2
68 199 2 46
879 3 54 796 3 97 872 3 94 647 3 99 994 3 46 884 3 86 946 3 76 465 3
79 944 3 84
;

proc sort data=grades;
by section plusminus;

proc print data=grades;
by section;
id section;
run;





Statistical Analysis System DATA
-9 -

7.2. Bucles
En SAS podemos encontrar tres tipos de bucles:
1. DO BY END. Bucle iteractivo
2. DO WHILE END. Bucle con expresin mientras.
3. DO UNTIL END. Bucle con expression hasta.
Sentencia DO-BY-END
DO indice=ini TO fin BY incremento;
Sentencia 1;
Sentencia 2;
.. ;
END;
Repite las instrucciones entre la sentencia DO y la sentencia END tantas veces como
valores toma el ndice (desde ini hasta fin, con los incrementos solicitados).
Ejemplo 1: Escribe 5 veces Hola en la ventana LOG.
DATA;
DO i=1 TO 5;
PUT 'HOLA';
END;
Ejemplo 2: Sumar los nmeros impares del 1 al 13.
DATA;
suma=0;
DO i=1 TO 13 BY 2;
suma=suma+i;
END;

Observacin-Si se quieren sumar los nmeros 2,5,9,18, se podra escribir:
DATA;
suma=0;
DO i=2,5,9,18;
suma=suma+i;
End;

Observacin -Si se quieren ejecutar ciertas sentencias para varios valores de la var.
mes:
DO mes='enero', 'febrero','abril';

Statistical Analysis System DATA
-10 -


Observacin - Se pueden combinar los dos formatos:
DO cuenta=3 to 5,8,17,20 to 26 by 2;

Ejecutara las sentencias antes del END para los valores de
cuenta 3,4,5,8,17,20,22,24,26.
Observacin - Se pueden cambiar los valores de la var. ndice dentro del DO para
finalizarlo:
data uno;
input x @@;
put 'leo observacin n'_N_x=;
stop=10;
suma=0;
do i=1 to stop;
suma=suma+i*x;
put i= suma=;
if suma>20 then i=stop;
end;
cards;
3 4 7
;

Escribe:

leo obs n1 X=3
I=1 SUMA=3
I=2 SUMA=9
I=3 SUMA=18
I=4 SUMA=30
leo obs n2 X=4
I=1 SUMA=4
I=2 SUMA=12
I=3 SUMA=24
leo obs n3 X=7
I=1 SUMA=7
I=2 SUMA=21

Observacin -Se pueden anidar bucles:
DATA uno;
DO i=1 TO 3;
DO j=1 TO 4;
OUTPUT;
END;
END
;

Creara 12 observaciones en el archivo uno:
i=1 j=1
i=1 j=2
...


Statistical Analysis System DATA
-11 -

Ejemplo 3:
Creacin de una tabla probabilstica (Tabla de la distribucin de Poisson)
data;
/* CABECERA */

put / @10 'TABLA DE PROBABILIDADES ACUMULADAS PARA
POISSON(LAMBDA)';

do i=1 to 78;
put '-' @;
end;
put;

put @35 'LAMBDA';

do i=1 to 78;
put '-' @;
end;
put;

put 'k' @3 @;

do i=0.1 to 1.5 by 0.1;
put i 4.1 +1 @;
end;
put;

do i=1 to 78;
put '-' @;
end;

/* CREACION DE LA TABLA */

do k=0 to 7;
put / k @;
do lambda=0.1 to 1.5 by 0.1;
pro=poisson(lambda,k);
put pro 4.3 +1 @;
end;
end;








Statistical Analysis System DATA
-12 -

RESULTADO

TABLA DE PROBABILIDADES ACUMULADAS PARA POISSON(LAMBDA)
------------------------------------------------------------------------------
LAMBDA
------------------------------------------------------------------------------
k 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5
------------------------------------------------------------------------------
0 .905 .819 .741 .670 .607 .549 .497 .449 .407 .368 .333 .301 .273 .247 .223
1 .995 .982 .963 .938 .910 .878 .844 .809 .772 .736 .699 .663 .627 .592 .558
2 1.00 .999 .996 .992 .986 .977 .966 .953 .937 .920 .900 .879 .857 .833 .809
3 1.00 1.00 1.00 .999 .998 .997 .994 .991 .987 .981 .974 .966 .957 .946 .934
4 1.00 1.00 1.00 1.00 1.00 1.00 .999 .999 .998 .996 .995 .992 .989 .986 .981
5 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 .999 .999 .998 .998 .997 .996
6 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 .999 .999
7 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
NOTE: The data set WORK.DATA1 has 1 observations and 4 variables.
NOTE: At least one W.D format was too small for the number to be printed. The decimal
may be
shifted by the "BEST" format.
NOTE: DATA statement used:
real time 1:13.54


Statistical Analysis System DATA
-13 -

Ejemplos 4: Suma incorrecta. Variable macro.

%Let incremento = 0.000001; /*6 ceros 7 ceros 8 ceros*/
DATA;
x = &incremento;
suma = 0;
k = 0;
DO i = 1 to (1/&incremento);
suma = suma + x;
end;
put suma=;
y = 1/&incremento;
put y=;
run;
Sentencia DO WHILE
DO WHILE (expresin);END;
donde expresin es una condicin, y puede contener expresiones matemticas, los
smbolos <, >, <>, <=, >=, AND, OR, etc.
La sentencia realiza las instrucciones anteriores a END; mientras se cumpla la
expresin del parntesis:
DATA;
n=0;
do while(n < 5);
put n=;
n=n+1;
end;
Sentencia DO UNTIL
DO UNTIL (expresin);END;
Ejecuta las instrucciones anteriores a END hasta que se cumpla la expresin.
Lo anterior es equivalente a:
data;
n=0;
do until(n >= 5);
put n=;
n=n+1;
end;

Se pueden combinar varios formatos de DO:

data;
suma=0;
do i=1 to 10 by .5 while(suma < 8.5);
suma=suma+i;
Statistical Analysis System DATA
-14 -

put suma=;
end;
run;

Pone:
suma=1
suma=2.5
suma=7
suma=10

Statistical Analysis System DATA
-15 -

7.3. Simulacin de un archivo SAS
Una de las aplicaciones ms inmediatas de los bucles es la simulacin un archivo con
valores de variables aleatorias. Para ello, se crean bucles de tamao igual al nmero
de observaciones del archivo que se quiere crear y a medida que se generan los
valores de las variables, se graban en el archivo de salida con la orden OUTPUT.
Ejemplo 5:
Crear un archivo SAS donde estn las variables X1=N(2,2) y
X2=Gamma(a,p)=Gamma(2,5), con 20 observaciones:
data ejemplo;
do i=1 to 20;
X1=sqrt(2)*rannor(i)+2;
X2=5*rangam(i,2);
output;
end;
run;
Si se hubiera puesto errneamente el OUTPUT fuera del bucle, slo se hubiese grabado
en el archivo una observacin.
Obtencin de una muestra aleatoria
En esta seccin utilizaremos un ejemplo de obtencin de muestras aleatorias para
introducir la sentencia SET POINT que permite un acceso directo a un caso
determinado de un dataset.
La opcin SET archivo POINT=i trae a memoria slo la observacin n i del
archivo en cuestin.
Dndole valores a i iremos leyendo las diferentes observaciones que nos interesan:
Para realizar el ejemplo, primero creamos un dataset que contenga el conjunto de
datos de los que obtendremos una muestra aleatoria sin remplazamiento.
Creamos un DataSet para realizar el ejemplo.
DATA ejemplo;
DO id=1 TO 10000;
importe=ranuni(8)*1000; OUTPUT;
END;
RUN;

Statistical Analysis System DATA
-16 -

Mtodo simple de extraccin de muestras aleatorias con reemplazamiento
Para extraer una muestra aleatoria de 10 observaciones del archivo uno que tiene 30
observaciones, generamos 10 veces (mediante una uniforme discreta) valores enteros
entre 1 y 10000. Cada nmero generado ser el nmero de la observacin a leer con
SET - POINT del archivo en cuestin.
Ejemplo 1:
data dos;
do i=1 to 10;
nume=int(10000*ranuni(i)+1);
set ejemplo point=nume;
output;
end;
stop;
Hemos extrado una muestra con reemplazamiento : Una misma observacin puede
ser leda dos veces. El siguiente mtodo permite extraer muestras aleatorias sin
reemplazamiento .
Mtodo simple de extraccin de muestras aleatorias sin reemplazamiento
Se aade al archivo en cuestin una variable generada (uniforme, por ejemplo).
Se ordena el archivo mediante esta variable (PROC SORT). Esta ordenacin es por lo
tanto aleatoria.
Se toman las 10 primeras observaciones del archivo. Esta ser una muestra aleatoria.
Ejemplo 1: Obtener una muestra aleatoria de tamao 10 del fichero WORK.ejemplo.
DATA dos ;
SET ejemplo ;
nume=int(10000*ranuni(i)+1);

PROC SORT DATA=dos;BY nume ;

DATA tres ;
SET dos ;
IF n >10 THEN STOP ;
RUN ;
El nico problema de este mtodo es que requiere mucho tiempo de proceso en
archivos grandes, al tener que ordenar el archivo.
Ejemplo 2: Obtener una muestra aleatoria de tamao 100, 200 Y 333 del fichero
WORK.ejemplo.
Statistical Analysis System DATA
-17 -

En este segundo ejemplo nos piden obtener muestras aleatorias de diferentes
tamaos. Para simplificar la programacin utilizaremos una macro variable:
* Definicin de la macro-variable ;
%LET tamayo = 100;
DATA tres ;
SET ejemplo ;
IF n > &tamayo THEN STOP ;
RUN ;





Statistical Analysis System DATA
-18 -

7.4. Arrays
El concepto de array en SAS es diferente al concepto matemtico. En SAS, un array
es un conjunto de variables que se agrupan y a las cuales se les asigna un nombre
como referencia lo que permite el uso de ndices para referirse a ellas. A las variables
que constituyen el array se las llama elementos del array. A cada elemento del array
se le asocia un ndice cuyo valor representa la posicin del elemento en el array.
La estructura array permite realizar,
- Clculos repetitivos
- Crear variables
- Leer datos
- Realizar comparaciones entre varias variables.
Es importante sealar que un array es un grupo de variables. Por lo tanto, para cada
observacin diferente, los elementos del array tendrn diferentes valores.
Ejemplo 1: Cambio de ml a litros
Tenemos una serie de datos mensuales de precipitaciones en ml y queremos
expresarlos en litros, para ello hay que dividir cada dato de precipitacin entre mil.
Con arrays sera as,
DATA Precipitaciones;
INPUT anyo $ 1-10 Mes1-Mes12;
DATALINES;
1989/1990 28.00 135.00 108.00 53.00 18.00 17.00 75.00 37.00 29.00 13.00 18.00 29.00
1990/1991 102.00 65.00 50.00 53.00 64.00 75.00 51.00 33.00 16.00 20.00 11.00 62.00
1991/1992 63.00 62.00 26.00 15.00 29.00 37.00 37.00 42.00 85.00 14.00 42.00 46.00
1992/1993 109.00 28.00 55.00 12.00 34.00 32.00 67.00 72.00 37.00 13.00 28.00 55.00
1993/1994 106.00 51.00 37.00 52.00 51.00 10.00 44.00 60.00 15.00 10.00 11.00 58.00
1994/1995 75.00 50.00 43.00 45.00 47.00 28.00 25.00 32.00 29.00 18.00 22.00 39.00
1995/1996 22.60 82.50 129.10 135.20 57.20 45.50 38.30 72.50 17.90 21.30 31.30 52.70
1996/1997 36.60 99.60 143.80 106.80 11.40 3.50 36.70 68.00 54.90 39.40 40.50 41.30
1997/1998 45.60 138.10 99.90 52.30 29.30 19.80 75.70 67.40 17.30 10.30 16.80 55.00
1998/1999 37.70 35.30 49.60 43.20 27.00 54.10 43.30 43.30 19.40 20.70 15.40 71.10
1999/2000 89.10 43.20 46.60 20.50 11.20 30.30 97.90 52.30 17.60 20.50 15.70 29.20
2000/2001 88.40 96.00 101.20 86.30 33.10 93.30 24.90 37.10 9.90 33.50 17.50 43.00
2001/2002 67.30 41.90 27.40 38.10 24.60 47.40 52.80 62.50 35.90 15.50 38.80 42.30
2002/2003 75.70 93.10 72.70 71.20 59.30 38.40 50.20 42.60 17.60 14.00 20.50 39.40
2003/2004 114.70 83.70 65.00 39.40 52.20 66.50 58.60 63.80 16.90 14.50 29.30 32.60
2004/2005 83.10 37.10 50.20 12.90 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
;
PROC PRINT DATA = Precipitaciones;
RUN;
DATA litros;
SET Precipitaciones;
ARRAY litros {12} Mes1-Mes12;
DO i = 1 to 12;
litros {i} = litros {i}/1000;
END;
PROC PRINT DATA=litros;
RUN;



Statistical Analysis System DATA
-19 -

Ejemplo 2:
Supongamos tenemos el archivo SAS uno, y nos interesa dar valor 0 a los valores
negativos de las variables a, b y c, en todas las observaciones. Para ello :
Creamos un array con las variables a, b, c : a =x{1}, b=x{2}, c=x{3}.
Realizamos un bucle en el que i vaya de 1 a 3, y dentro del cual se realiza la operacin
mencionada con una variable cada vez.
Este proceso se repetir tantas veces como observaciones haya en el archivo
tratado.
El programa sera :
DATA dos ;
ARRAY x{3} a b c ;
SET uno ;
DO i=1 TO 3 ;
if x{i}<0 THEN x{i}=0 ;
END ;
RUN ;

Sentencia ARRAY
Agrupa variables en un vector.
Cada elemento del array es una variable (columna de datos).
Sintaxis 1:
ARRAY nombre [$] elementos (valores iniciales);
Cada variable del ARRAY se llamar nombre{1},...nombre{i}, donde i es la posicin
que ocupa, en el transcurso del bloque data actual. Sin embargo estos elementos del
array tomarn como nombres los nombres de los elementos a efectos de grabar en
archivo de salida y de escribirse en el LOG.
Ejemplo 3:
DATA;
INPUT a b c;
ARRAY todos a b c;
DO i=1 TO 3;
IF todos{i}<4 THEN PUT todos{i}=;
END;
CARDS;
2 3 6
1 2 5
3 5 2
4 0 9
Statistical Analysis System DATA
-20 -

5 10 23
1 3 4
;
RUN;

Escribe en LOG:

a=2
b=3
a=1
b=2
a=3
c=2
b=0
a=1
b=3

Notas:
- Si las variables del ARRAY son alfanumricas se pondr el
$.
- Si se les quiere dar valores iniciales se ponen entre
parntesis.
Sintaxis 3:
ARRAY nombre {n} variables (val.iniciales);
donde n indica la dimensin del vector.
Si se estn creando las variables y no se les da nombre, adquieren
nombre1...nombren:
Ejemplo 4:
DATA uno;
ARRAY hola{4} (2 4 6 7);
DO i=1 TO 4;
hola{i}=hola{i}*i;
PUT hola{i}=; OUTPUT;
END;
RUN;

escribe en LOG:
hola1=2
hola2=8
hola3=18
hola4=28

y el archivo uno tendr los datos:

obs hola1 hola2 hola3 hola4 i
1 2 4 6 7 1
2 2 8 6 7 2
3 2 8 18 7 3
4 2 8 18 28 4

Statistical Analysis System DATA
-21 -

ARRAY multidimensional:
ARRAY {n1,n2,...} variables (valores iniciales);
El orden de las variables creadas o existentes referentes a los referentes a los
elementos del array es de derecha a izquierda segn esos elementos, y se ver a
continuacin.
Ejemplo 1:
array vari{2,3} x1-x6;
el array contendra los siguientes elementos:
vari{1,1} vari{1,2} vari{1,3} x1 x2 x3
vari{2,1} vari{2,2} vari{2,3} x4 x5 x6
Ejemplo 2
La utilidad del array multidimensional est en ordenar las variables segn dimensiones
que tengan sentido en un conjunto de datos determinado. En el siguiente ejemplo, hay
dos ciudades (dimensin 1) con 5 medidas de temperatura cada una (dimensin 2).
Los datos de los que se disponen son las temperaturas de dos ciudades tomadas en
cinco instantes diferentes. Estas temperaturas estn medidas en grados Farenheit. Se
desea transformar las temperaturas de grados Farenheit a Celsius, para lo cual se
organizan las variables en un array bidimensional. Aunque se podra utilizar un array
unidimensional tambin para esa operacin, la estructura del array bidimensional es
ms apropiada en cuanto a leer los datos y tenerlos guardados con una estructura que
permita operar con estas variables en pasos DATA posteriores.

/*******************************/
/* Con un ARRAY bidimensional */
/*******************************/

DATA temperatura (drop=i j);
ARRAY temp{2,5} c1t1-c1t5 c2t1-c2t5;
INPUT c1t1-c1t5 / c2t1-c2t5;
DO i=1 TO 2;
DO j=1 TO 5;
temp{i,j}=(temp{i,j}-32)/1.8;
END;
END;
DATALINES;
89.5 65.4 75.3 77.7 89.3
Statistical Analysis System DATA
-22 -

73.7 87.3 89.9 98.2 35.6
75.8 82.1 98.2 93.5 67.7
101.3 86.5 59.2 35.6 75.7
;
PROC PRINT DATA=temperatura;
TITLE 'Temperatura de dos ciudades';
RUN;

/*******************************/
/* Con un ARRAY unidimensional */
/*******************************/

DATA temperatura2 (drop=i );
ARRAY medir {10} c1t1-c1t5 c2t1-c2t5;
INPUT c1t1-c1t5 / c2t1-c2t5;
DO i=1 TO 10;
medir{i}=(medir{i}-32)/1.8;
END;
DATALINES;
89.5 65.4 75.3 77.7 89.3
73.7 87.3 89.9 98.2 35.6
75.8 82.1 98.2 93.5 67.7
101.3 86.5 59.2 35.6 75.7
;
PROC PRINT DATA=temperatura2;
TITLE 'Temperatura de dos ciudades';
RUN;

En el ejemplo anterior no se ha hecho referencia al nmero de observaciones de las
variables. Al tratar con ficheros rectangulares, el nmero de observaciones es igual
para cada una de las variables del fichero de datos. Este nmero es una dimensin
ms del array que conoce y por lo tanto SAS trabaja con ella por defecto.
Bucles en ARRAY
Adems de los bucles que existen en el lenguaje de programacin, SAS proporciona
un tipo de bucle especial para los arrays.
Sentencia DO OVER nombrearray ;END;
Ejecuta las sentencias entre el DO y el END para cada elemento del array: No es
necesario llamar a los elementos del array nombre{1}... basta con referirse a ellos por
el nombre.
Ejemplo 3:
data;
input x1-x3 @@;
Statistical Analysis System DATA
-23 -

array g x1-x3;
do over g;
g=g*5;
put g=;
end;
cards;
3 4 7 1 2 4
;
run;

escribe:
x1=15
x2=20
x3=35
x1=5
x2=10
x3=20

Ejemplo 4: Queremos poner a missing los valores negativos de las variables x3, x4,
x5 del archivo uno.
DATA dos;
SET ejemplo;
ARRAY nuevas x3-x5;
DO OVER nuevas;
IF nuevas<0 THEN nuevas=.;
OUTPUT;
END;
RUN;
En total, las sentencias que se pueden utilizar para referirse a las variables de un
ARRAY son:
DO WHILE,DO UNTIL,DO/TO/BY,IF,PUT,SELECT,INPUT.







Statistical Analysis System DATA
-24 -

Ejemplo 5: La emisora de Radio $=PCP ha realizado una encuesta sobre 5
canciones. Las canciones son puntuadas del 1 al 5 , donde 1 = Cambiar de emisora
y 5 =Subir le volumen. Si el oyente no ha odo nunca la cancin la punta con 9.
Los datos obtenidos son:
Ciudad
Ed
ad
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
Albany 54 4 3 5 9 9 2 1 4 4 9
Richmond 33 5 2 4 3 9 2 9 3 3 3
Oakland 27 1 3 2 9 9 9 3 4 2 3
Richmond 41 4 3 5 5 5 2 9 4 5 5
Berkeley 18 3 4 9 1 4 9 3 9 3 2

Você também pode gostar