BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
martinreindl
Calcite | Level 5

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.

1 ACCEPTED SOLUTION

Accepted Solutions
martinreindl
Calcite | Level 5

Turns out the code above works. I had a seperate issue in my dataset. I'll leave the question up in case somebody else wants to do something simillar in the future.

View solution in original post

2 REPLIES 2
martinreindl
Calcite | Level 5

Turns out the code above works. I had a seperate issue in my dataset. I'll leave the question up in case somebody else wants to do something simillar in the future.

PeterClemmensen
Super User
data data_set0;
   input d_1 d_2 d_3;
   datalines;
1      2      3
4      5      6
7      8      9
;

data data_set1;
   input d_1 d_2 d_3;
   datalines;
1      2      3
4      5      6
7      8      9
;

data data_set2;
   input d_1 d_2 d_3;
   datalines;
1      2      3
4      5      6
7      8      9
;

data data_set3;
   input d_1 d_2 d_3;
   datalines;
1      2      3
4      5      6
7      8      9
;


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_set0;
        READ all var _ALL_ into data_set0_matrix[colname=varNames];
        CLOSE data_set_0;
 
        USE data_set1;
        READ all var _ALL_ into data_set1_matrix[colname=varNames];
        CLOSE data_set_1;

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

        USE data_set3;
        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; 

Just minor corrections will make your code work as above 🙂

 

EDIT: I see you made it work already. Thumbs up 🙂

SAS INNOVATE 2024

Innovate_SAS_Blue.png

Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 2 replies
  • 1298 views
  • 0 likes
  • 2 in conversation