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

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