Often, the first step of a SAS/IML program is to use the USE, READ, and CLOSE statements to read data from a SAS data set into a vector or matrix. There are several ways to read data:

- Read variables into vectors of the same name.
- Read one or more variables of the same type (numeric or character) into a matrix.
- Read all variables of a certain type into a matrix.

The `Sashelp.Class` data set is distributed with SAS software. The data set contains 19 observations, two character variables (NAME and SEX), and three numeric variables (AGE, HEIGHT, and WEIGHT). The following statements start PROC IML and open the data set for reading:

proc iml; use Sashelp.Class; |

### Read Variables into Vectors

You can read a specified set of variables into vectors that have the same name as the variables. For example, the following statement creates the column vectors `Sex` and `Height`:

/** read specific variables into vectors **/ read all var {Sex Height}; |

The ALL keyword refers to the number of observations to be read. Consequently, the preceding statement reads all observations for the variables SEX and HEIGHT into the column vectors `Sex` and `Height`.

You can also specify the variable names in a character matrix:

varNames = {"Age" "Weight"}; read all var varNames; |

`Age`and

`Weight`.

### Read Variables into a Matrix

For regression and other multivariate analyses, it is convenient to read data from a set of variables into columns of a matrix. Use the INTO keyword for this. For example, if `XVarNames` is a character matrix that contains the name of explanatory variables and
`YVarName` is a character matrix that contains the name of a response variable, then the following statements read the specified variables into matrices `x` and `y`:

XVarNames = {"Age" "Height"}; YVarName = {"Weight"}; read all var XVarNames into x; read all var YVarName into y; |

### Read All Numeric (or Character) Variables

If you want to read all numeric variables into a matrix, you can use the _`NUM`_ keyword. You can get the names of the numeric variables by specifying the COLNAME= option after the matrix name, as follows:

read all var _NUM_ into z[colname=NumNames]; |

The preceding statement reads the numeric variables AGE, HEIGHT, and WEIGHT into the matrix `z` and also creates a character matrix, `NumNames`, that contains the names of those variables. (To read all character variables, use the _`CHAR`_ keyword.)

When you are finished reading the data, remember to close the data set.

For further details, see the "Language Reference" chapter in the *SAS/IML User's Guide*.

## 3 Comments

Pingback: Writing data from a matrix to a SAS data set - The DO Loop

Pingback: Read data into vectors or into a matrix: Which is better? - The DO Loop

Thank you very much Rick. This is very clear.