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:
    • assignment statement
    • sum statement
    • DO UNTIL(expression)
    • DO WHILE(expression)
    • IF
    • INPUT
    • PUT
    • SELECT
    • WINDOW.
  • 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 {*};

See Also

Array Processing in SAS Language Reference: Concepts
Functions:
DIM Function in SAS Functions and CALL Routines: Reference