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

When using SAS/IML, I sometimes need to form submatrices from a given matrix. For example, when I am given 16 x 16 square matrix, say matrix A, I would probably want to subdivide the matrix into four 4x4 submatrices and apply the same data process. In this case, it would probably be more convenient if we can make an index for the submatrices, such as A_1, A_2, A_3, A_4, or A_{1,1}, A_{1,2}, A_{2,1}, A_{2,2}. 

 

How can I write a code for making these submatrices?

 

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

You can specify a submatrix by using the row and column subscripts.

For example, if you have a 6 x 6 matrix, you can get the four 3 x 3 submatrices as follows

 

 

proc iml;
A = toeplitz(6:1);
print A;

/*   A[rows, cols] */
A1 = A[1:3, 1:3];
A2 = A[1:3, 4:6];
A3 = A[4:6, 1:3];
A4 = A[4:6, 4:6];

print A1, A2, A3, A4;

 

 

How you use this depends on what you are trying to accomplish. It's not clear what you want to do.

 

 

You can also loop over the submatrices and extract each one as part of a loop. For example, the following loop that iterates over the four submatrices:

cutPts = {0, 3, 6};
do i = 1 to 2;
   rows = (1+cutPts[i]) : cutPts[i+1];
   do j = 1 to 2;
      cols = (1+cutPts[j]) : cutPts[j+1];
      A_ij = A[rows, cols];
      det = det(A_ij);
      print i j det;
   end;
end;

 

 

View solution in original post

2 REPLIES 2
Rick_SAS
SAS Super FREQ

You can specify a submatrix by using the row and column subscripts.

For example, if you have a 6 x 6 matrix, you can get the four 3 x 3 submatrices as follows

 

 

proc iml;
A = toeplitz(6:1);
print A;

/*   A[rows, cols] */
A1 = A[1:3, 1:3];
A2 = A[1:3, 4:6];
A3 = A[4:6, 1:3];
A4 = A[4:6, 4:6];

print A1, A2, A3, A4;

 

 

How you use this depends on what you are trying to accomplish. It's not clear what you want to do.

 

 

You can also loop over the submatrices and extract each one as part of a loop. For example, the following loop that iterates over the four submatrices:

cutPts = {0, 3, 6};
do i = 1 to 2;
   rows = (1+cutPts[i]) : cutPts[i+1];
   do j = 1 to 2;
      cols = (1+cutPts[j]) : cutPts[j+1];
      A_ij = A[rows, cols];
      det = det(A_ij);
      print i j det;
   end;
end;

 

 

SASingaKorean
Calcite | Level 5
Thank you for your reply. It was very useful.

sas-innovate-white.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

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