Search code examples
matrixsassas-iml

Creating an average matrix from four individual matrices of same size in SAS / IML


I am using IML/SAS in SAS Enterprise Guide for the first time, and want to do the following:

  1. Read some datasets into IML matrices
  2. Average the matrices
  3. Turn the resulting IML matrix back into a SAS data set

My input data sets look something like the following (this is dummy data - the actual sets are larger). The format of the input data sets is also the format I want from the output data sets.

data_set0:     d_1    d_2    d_3
               1      2      3
               4      5      6 
               7      8      9 

I proceed as follows:

proc iml;
    /* set the names of the migration matrix columns */
    varNames = {"d_1","d_2","d_3"};

    /* 1. transform input data set into matrix 
    USE data_set_0;
    READ all var _ALL_ into data_set0_matrix[colname=varNames];
    CLOSE data_set_0;

    USE data_set_1;
    READ all var _ALL_ into data_set1_matrix[colname=varNames];
    CLOSE data_set_1;

    USE data_set_2;
    READ all var _ALL_ into data_set2_matrix[colname=varNames];
    CLOSE data_set_2;

    USE data_set_3;
    READ all var _ALL_ into data_set3_matrix[colname=varNames];
    CLOSE data_set_3;

    /* 2. find the average matrix */
    matrix_sum = (data_set0_matrix + data_set1_matrix + 
                  data_set2_matrix + data_set3_matrix)/4;

    /* 3. turn the resulting IML matrix back into a SAS data set */ 
    create output_data from matrix_sum[colname=varNames];
    append from matrix_sum; 
    close output_data; 
 quit; 

I've been trying loads of stuff, but nothing seems to work for me. The error I currently get reads:

ERROR: Matrix matrix_sum has not been set to a value

What am I doing wrong? Thanks up front for the help.


Solution

  • The above code works. In the full version of this code (this is simplified for readability) I had misnamed one of my variables.

    I'll leave the question up in case somebody else wants to use SAS / IML to find an average matrix.