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

I receive the error: "(execution) Invalid subscript or subscript out of range" when try to create a submatrix tmp which is based on matrix FD which contains all variables and observations from the dataset WFD (which contains 62 columns/variables and 2108 rows).

 

In tmp, I want to sum row 1 to 34, and row 35 to 69, and so on, until it reaches row 2074 to 2108 from the FD matrix, so that finally, the tmp matrix becomas a 62x62 matrix.

 

Do anyone see what I am doing wrong in my code?

 

Note: I have tried to find the mistake by looking in the log, i.e. by trying to find this reference point: operation: [ at line 2965 column 194, but I really don't understand where in the log I can find this lines and columns with really high numbers.

 

Help is very appreciated.

 

The code:

 

data tmpf ; set WFD;
run;

 

proc iml;
use tmpf(drop = year);
read all var _all_ into FD;
k = 0;
do i = 1 to 2108 by 34;
  j = i+33;
  k = k+1;
rows = i:j;
cols = k:k;
tmp = fd[rows,cols];
DMD =  DMD // tmp ;
end;

 

The log:

 

NOTE: There were 14756 observations read from the data set WEBWORK.WFD.

NOTE: The data set WEBWORK.TMPF has 2108 observations and 63 variables.
NOTE: DATA statement used (Total process time):
real time 0.13 seconds
cpu time 0.05 seconds
 
NOTE: IML Ready
ERROR: (execution) Invalid subscript or subscript out of range.
 
operation : [ at line 2650 column 193
operands : fd, rows, cols
 
FD      2108 rows     60 cols     (numeric)
rows    1 row           34 cols      (numeric)
cols      1 row          1 col           (numeric)
 
61
 
 
Best regards,
Birgitte

 

1 ACCEPTED SOLUTION

Accepted Solutions
IanWakeling
Barite | Level 11

I think the problem is the number of columns in FD.  The log says it has 60 columns, however the loop:

 

do i = 1 to 2108 by 34;

 

will iterate 62 times.  So the error is occuring on the 61st iteration when you try to access the 61st column.

View solution in original post

3 REPLIES 3
Ksharp
Super User
Your code doesn't look right.


data tmpf ; 
retain year 1;
array x{*} var1-var62;
do i=1 to 2108;
 do j=1 to dim(x);
  x{j}=ranuni(0);
 end;
 output;
end;
drop i j;
run;
 
proc iml;
i=0;
DMD=j(62,62,.);

use tmpf(drop = year);
do data;
 read next 34 var _all_ into tmp;
 i=i+1;
 DMD[i,]=tmp[+,];
end;
close;

create want from dmd;
append from dmd;
close;
quit;

IanWakeling
Barite | Level 11

I think the problem is the number of columns in FD.  The log says it has 60 columns, however the loop:

 

do i = 1 to 2108 by 34;

 

will iterate 62 times.  So the error is occuring on the 61st iteration when you try to access the 61st column.

biringstad
Calcite | Level 5

Thank you!

 

Indeed, I think that was the problem. I discovered that I made a mistake initially when I made the dataset (WFD) that I use to create the FD matrix, and therefore I had a smaller column range than planned. When I changed it to the correct one the code above worked.

 

Birgitte

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

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
  • 3 replies
  • 7915 views
  • 2 likes
  • 3 in conversation