# SAS arrays: What are they and why use them?

### What is a SAS array?

A SAS array- a set of variables grouped together for the duration of a data step by being given a name in an
`ARRAY`

statementarray pop(1:5) ga sc nc va wv;

- array name is "pop"
- the sequence of variable names ga sc nc va wv is the "array list"
- the variables in the array list are the "array elements"
- each array element in this example has a position number in the array list from 1 to 5

Convenience of arrays

- two ways to refer to variables which are array elements
- variable name
- array name with subscript pointing to position of variable in the array list
pop(3) refers to the variable in position number 3 in the array pop (nc in above example)

Subscripts can be

- constants
- variables
- expressions

Array elements

- must all be of same type (numeric or character)
- can be variables which exist or which will be created in the data step

### One-dimensional array declarations

array x(1:6) a b c d e f; * x(5) is the variable e *; * subscript lower bound= 1 : upper bound= 6 *; array x(0:5) a b c d e f; * x(4) is the variable e *; array quiz(20) q1-q20; * equivalent array declarations *; array quiz(1:20) q1-q20; * quiz(4) is the variable q4 *; array quiz(*) q1-q20; * use an asterisk and have SAS figure out how many variables * there are in the array *; array quiz(20); * SAS creates quiz1-quiz20 as array elements *; array color(1:3) $1 red blue green; * character array, elements have length= 1 character *; * color(2) is the variable blue *; array pop(1:5) yr95-yr99; * pop(2) is the variable yr96 *; array pop(95:99) yr95-yr99; * pop(96) is the variable yr96 *; array x(*) _numeric_; * all numeric variables on the observation *; array y(*) _character_; * all character variables on the observation *;

### Two-dimensional array declarations

array quiz(1:4, 1:5) q1-q20; /** picture 4 rows, 5 columns: q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q(2,4) is the variable q9 **/ array pop(1:3, 98:99) nc98 nc99 va98 va99 sc98 sc99; /** picture 3 rows, 2 columns: nc98 nc99 va98 va99 sc98 sc99 pop(3,99) is the variable sc99 **/

### Why use SAS arrays?

- repeat an action or set of actions on each of a group of variables
- write shorter programs
- restructure a SAS data set to change the unit of observation

### Simple examples using one-dimensional arrays

1. Recode the set of variables:`A B C D E F G`

in the same way: if the variable has a value
of 99 recode it to SAS missing.
array v(7) a b c d e f g; * this creates a permanent variable named k: *; do k= 1 to 7; if v(k) = 99 then v(k)= .; end;

2. Each observation of your data set has five variables: `SEX1 SEX2 SEX3 SEX4 SEX5`

which give
the sex (1= male, 2= female) of up to 5 persons. You want to count the number of males (`MALES`

)
and the number of females (`FEMALES`

) on each observation.

array sex(1:5) sex1-sex5; males= 0; females= 0; do i= 1 to 5; if sex(i) = 1 then males= males + 1; else if sex(i) = 2 then females= females + 1; end;

3. Recode all numeric variables in your data set as follows: if a variable has a value of 98 or 99 recode it to SAS missing.

array nvar(*) _numeric_; do i= 1 to dim(nvar); if nvar(i) in(98, 99) then nvar(i)= .; end;

### Using arrays to restructure a SAS data set

For program examples see how to create a child file from a mother file or how to create a mother file from a child file.

Another topic?