Multidimensional
arrays are usually processed inside nested DO loops. For example,
the following is one form that processes a two-dimensional array:
DO index-variable-1=1
TO number-of-rows;
DO index-variable-2=1
TO number-of-columns;
... more SAS statements ...
END;
END;
An array reference can
use two or more index variables as the subscript to refer to two or
more dimensions of an array. Use the following form:
array-name {index-variable-1, …,index-variable-n}
The following example
creates an array that contains ten variables- five temperature measures
(t1 through t5) from two cities (c1 and c2). The DATA step contains
two DO loops.
-
The outer DO loop (DO I=1 TO 2)
processes the inner DO loop twice.
-
The inner DO loop (DO J=1 TO 5)
applies the ROUND function to all the variables in one row.
For each iteration of
the DO loops, SAS substitutes the value of the array element corresponding
to the current values of I and J.
options nodate pageno=1 linesize=80 pagesize=60;
data temps;
array temprg{2,5} c1t1-c1t5 c2t1-c2t5;
input c1t1-c1t5 /
c2t1-c2t5;
do i=1 to 2;
do j=1 to 5;
temprg{i,j}=round(temprg{i,j});
end;
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=temps;
title 'Temperature Measures for Two Cities';
run;
The following data set
TEMPS contains the values of the variables rounded to the nearest
whole number.
Using a Multidimensional Array
Temperature Measures for Two Cities 1
Obs c1t1 c1t2 c1t3 c1t4 c1t5 c2t1 c2t2 c2t3 c2t4 c2t5 i j
1 90 65 75 78 89 74 87 90 98 36 3 6
2 76 82 98 94 68 101 87 59 36 76 3 6
The previous example
can also use the DIM function to produce the same result:
do
i=1 to dim1(temprg);
do j=1 to dim2(temprg);
temprg{i,j}=round(temprg{i,j});
end;
end;
The value of DIM1(TEMPRG) is 2; the value of DIM2(TEMPRG)
is 5.