Language Reference


APPEND Statement

  • APPEND <VAR operand>;

  • APPEND FROM matrix <[ROWNAME=row-name]> ;

The APPEND statement adds observations to the end of a SAS data set.

The arguments to the APPEND statement are as follows:

operand

specifies a set of variables. You can specify variables by using any of the methods described in the section the section Select Variables with the VAR Clause.

matrix

is the name of a matrix that contains data to append. Each column of the matrix becomes a variable in the data set.

row-name

is a character matrix or quoted literal that contains descriptive row names.

You can use the APPEND statement to add data to the end of the current output data set. The appended observations are from either the variables specified in the VAR clause or variables created from the columns of matrix. You cannot use the FROM clause and the VAR clause in the same statement.

The APPEND statement is usually used without any arguments. A common practice is to specify the data in the CREATE statement, as shown in the following example:

proc iml;
x = {1,2,3,4};          /* 4 x 1 vector */
y = {4 3,2 1};          /* 2 x 2 matrix */
z = {2,3,4};            /* 3 x 1 vector */
c = {A,B,C,D};          /* 4 x 1 character vector */

create Temp1 var {x y}; /* Temp1 contains two variables */
append;                 /* appends data from x and y */
close Temp1;
quit;

proc print data=Temp1 noobs;
run;

The values in the Temp1 data set are shown in Figure 25.41. Notice that the $2\times 2$ matrix y is written to the data set in row-major order.

Figure 25.41: Data Set Created from Matrices

X Y
1 4
2 3
3 2
4 1



If you omit the VAR (and FROM) clause in the CREATE statement, then the new data set contains a variable for each SAS/IML matrix that is in scope. You can use the VAR clause in the APPEND statement to write specific variables. Variables that are not explicitly specified receive missing values, as shown in the following statements:

proc iml;
x = {1,2,3,4};          /* 4 x 1 vector */
y = {4 3,2 1};          /* 2 x 2 matrix */
z = {2,3,4};            /* 3 x 1 vector */
c = {A,B,C,D};          /* 4 x 1 character vector */

create Temp2;           /* Temp2 contains a variable for each matrix */
append var {c x z};     /* y gets missing values */
close Temp2;
quit;

proc print data=Temp2 noobs;
run;

The values in the Temp2 data set are shown in Figure 25.42. The data set contains four observations because that is the number of elements in the matrix with the greatest number of elements. Elements are appended in row-major order. Notice that the variable z contains a missing value at the end because the variable was created from a SAS/IML matrix that contained fewer than four elements.

Figure 25.42: Data Set Created from All Matrices

c x y z
A 1 . 2
B 2 . 3
C 3 . 4
D 4 . .



As shown in the previous example, the default variables for the APPEND statement are all matrices that match variables in the current data set with respect to name and type.

The ROWNAME= option in the FROM clause specifies the name of a character matrix to contain row titles. Use this option in conjunction with the identical option in the FROM clause of the CREATE statement, as shown in the following statements:

proc iml;
VarName = {"x" "y"};
w = {3 96,
     4 90,
     2 100,
     4 92};                     /* data matrix */
cov = cov(w);                   /* sample covariance matrix of data */

create Temp3 from cov[rowname=VarName colname=VarName];
append from cov[rowname=VarName];
close Temp3;
quit;

proc print data=Temp3 noobs;
run;

The values in the Temp3 data set are shown in Figure 25.43. The matrix cov contains the data that are saved to the Temp3 data set. The character vector VarName contains the names of the variables for the Temp3 data set. (If you use the FROM clause in the CREATE statement, but do not specify the COLNAME= option, then the variables are named COL1, COL2, and so on.) The ROWNAME= option enables you to specify a single character variable when you are creating a data set from a numerical matrix. This is useful for specifying variable names in a correlation or covariance matrix, but can also be used more generally to specify a row label for each observation.

Figure 25.43: Data Set That Contains Row Labels

VarName x y
x 0.91667 -4.1667
y -4.16667 19.6667



If you do not specify the ROWNAME= option in the CREATE statement, then you do not need to specify the ROWNAME= option in the APPEND statement, as shown in the following example:

create Temp3 from cov[colname=VarName];
append from cov;
close Temp3;

You can also use the APPEND statement with the EDIT statement . See the documentation for the EDIT statement for examples.