Array Reference Statement
Describes the elements in an array to be processed.
Valid in: |
DATA step |
Category: |
Information |
Type: |
Declarative |
Syntax
Arguments
- array-name
-
is the name of an array
that was previously defined with an ARRAY statement in the same DATA
step.
- {subscript}
-
specifies the subscript.
Any of these forms can be used:
- {variable-1< ,
…variable-n>}
-
specifies a variable,
or variable list that is usually used with DO-loop processing. For
each execution of the DO loop, the current value of this variable
becomes the subscript of the array element being processed.
Tip:You can enclose a subscript in braces ( { } ), brackets
( [ ] ), or parentheses (( )).
- {*}
-
forces SAS to treat
the elements in the array as a variable list.
Restriction:When you define an array that contains temporary array
elements, you cannot reference the array elements with an asterisk.
Tips:The asterisk can be used with the INPUT and PUT statements,
and with some SAS functions.
This syntax is provided for convenience and is an exception
to usual array processing.
- expression-1<
, ...expression-n>
-
specifies a SAS expression.
Range:The expression must evaluate to a subscript value when
the statement that contains the array reference executes. The expression
can also be an integer with a value between the lower and upper bounds
of the array, inclusive.
Details
-
To refer to an array in a program
statement, use an array reference. The ARRAY statement that defines
the array must appear in the DATA step before any references to that
array. An array definition is only in effect for the duration of the
DATA step. If you want to use the same array in several DATA steps,
redefine the array in each step.
CAUTION:
Using the
name of a SAS function as an array name can cause unpredictable results.
If you inadvertently
use a function name as the name of the array, SAS treats parenthetical
references that involve the name as array references, not function
references, for the duration of the DATA step. A warning message is
written to the SAS log.
-
You can use an array reference
anywhere that you can write a SAS expression, including SAS functions
and these SAS statements:
-
The DIM function is often used
with the iterative DO statement to return the number of elements in
a dimension of an array, when the lower bound of the dimension is
1. If you use DIM, you can change the number of array elements without
changing the upper bound of the DO statement. For example, because
DIM(NEW) returns a value of 4, the following statements process all
the elements in the array:
array new{*} score1-score4;
do i=1 to dim(new);
new{i}=new{i}+10;
end;
Comparisons
An ARRAY statement defines
an array, whereas an array reference defines the members of the array
to process.
Examples
Example 1: Using Iterative DO-Loop Processing
In this example, the
statements process each element of the array, using the value of variable
I as the subscript on the array references for each iteration of the
DO loop. If an array element has a value of 99, the IF-THEN statement
changes that value to 100.
array days{7} d1-d7;
do i=1 to 7;
if days{i}=99 then days{i}=100;
end;
Example 2: Referencing Many Arrays in One Statement
You can refer to more
than one array in a single SAS statement. In this example, you create
two arrays, DAYS and HOURS. The statements inside the DO loop substitute
the current value of variable I to reference each array element in
both arrays.
array days{7} d1-d7;
array hours{7} h1-h7;
do i=1 to 7;
if days{i}=99 then days{i}=100;
hours{i}=days{i}*24;
end;
Example 3: Specifying the Subscript
In this example, the
INPUT statement reads in variables A1, A2, and the third element (A3)
of the array named ARR1:
array arr1{*} a1-a3;
x=1;
input a1 a2 arr1{x+2};
Example 4: Using the Asterisk References as a Variable List
-
array cost{10} cost1-cost10;
totcost=sum(of cost {*});
-
array days{7} d1-d7;
input days {*};
-
array hours{7} h1-h7;
put hours {*};