Specifying Array Bounds


Identifying Upper and Lower Bounds

Typically in an ARRAY statement, the subscript in each dimension of the array ranges from 1 to n , where n is the number of elements in that dimension. Thus, 1 is the lower bound and n is the upper bound of that dimension of the array. For example, in the following array, the lower bound is 1 and the upper bound is 4:

 array new{4} Jackson Poulenc Andrew Parson; 

In the following ARRAY statement, the bounds of the first dimension are 1 and 2 and those of the second dimension are 1 and 5:

 array test{2,5} test1-test10; 

Bounded array dimensions have the following form:

{< lower-1 :> upper-1 <, < lower-n :> upper-n >}

Therefore, you can also write the previous ARRAY statements as follows :

 array new{1:4} Jackson Poulenc Andrew Parson;  array test{1:2,1:5} test1-test10; 

For most arrays, 1 is a convenient lower bound, so you do not need to specify the lower bound. However, specifying both the lower and the upper bounds is useful when the array dimensions have beginning points other than 1.

In the following example, ten variables are named Year76 through Year85. The following ARRAY statements place the variables into two arrays named FIRST and SECOND:

 array first{10} Year76-Year85;  array second{76:85} Year76-Year85; 

In the first ARRAY statement, the element first{4} is variable Year79, first{7} is Year82, and so on. In the second ARRAY statement, element second{79} is Year79 and second{82} is Year82.

To process the array names SECOND in a DO group , be sure that the range of the DO loop matches the range of the array as follows:

 do i=76 to 85;     if second{i}=9 then second{i}=.;  end; 

Determining Array Bounds: LBOUND and HBOUND Functions

You can use the LBOUND and HBOUND functions to determine array bounds. The LBOUND function returns the lower bound of a one-dimensional array or the lower bound of a specified dimension of a multidimensional array. The HBOUND function returns the upper bound of a one-dimensional array or the upper bound of a specified dimension of a multidimensional array.

The form of the LBOUND and HBOUND functions is as follows:

LBOUND n ( array- name )

HBOUND n ( array-name )

where

n

  • is the specified dimension and has a default value of 1.

You can use the LBOUND and HBOUND functions to specify the starting and ending values of the iterative DO loop to process the elements of the array named SECOND:

 do i=lbound{second} to hbound{second};     if second{i}=9 then second{i}=.;  end; 

In this example, the index variable in the iterative DO statement ranges from 76 to 85.

When to Use the HBOUND Function instead of the DIM Function

The following ARRAY statement defines an array containing a total of five elements, a lower bound of 72, and an upper bound of 76. It represents the calendar years 1972 through 1976:

 array years{72:76} first second third fourth fifth; 

To process the array named YEARS in an iterative DO loop, be sure that the range of the DO loop matches the range of the array as follows:

 do i=lbound(years) to hbound(years);     if years{i}=99 then years{i}=.;  end; 

The value of LBOUND(YEARS) is 72; the value of HBOUND(YEARS) is 76.

For this example, the DIM function would return a value of 5, the total count of elements in the array YEARS. Therefore, if you used the DIM function instead of the HBOUND function for the upper bound of the array, the statements inside the DO loop would not have executed.

Specifying Bounds in a Two-Dimensional Array

The following list contains 40 variables named X60 through X99. They represent the years 1960 through 1999.

 X60     X61     X62     X63     X64     X65     X66     X67     X68     X69  X70     X71     X72     X73     X74     X75     X76     X77     X78     X79  X80     X81     X82     X83     X84     X85     X86     X87     X88     X89  X90     X91     X92     X93     X94     X95     X96     X97     X98     X99 

The following ARRAY statement arranges the variables in an array by decades. The rows range from 6 through 9, and the columns range from 0 through 9.

 array X{6:9,0:9} X60-X99; 

In array X, variable X63 is element X{6,3} and variable X89 is element X{8,9}. To process array X with iterative DO loops , use one of these methods :

Method 1:

 do i=6 to 9;     do j=0 to 9;        if X{i,j}=0 then X{i,j}=.;     end;  end; 

Method 2:

 do i=lbound1(X) to hbound1(X);     do j=lbound2(X) to hbound2(X);        if X{i,j}=0 then X{i,j}=.;     end;  end; 

Both examples change all values of 0 in variables X60 through X99 to missing. The first example sets the range of the DO groups explicitly, and the second example uses the LBOUND and HBOUND functions to return the bounds of each dimension of the array.




SAS 9.1 Language Reference. Concepts
SAS 9.1 Language Reference Concepts
ISBN: 1590471989
EAN: 2147483647
Year: 2004
Pages: 255

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net