Calcite | Level 5

## How to extract submatrix?

Hello,

Currently i have problem for convert some submatrix from an output solution file. The one of output table (this output file contains 4000 table like as follows) is represented as the follows:

 3.201 0.104 7.66 -6.77 -2.09 6.14 2.54 -1.06 0.36 2.36 -1.05 1.8 0.89 -0.36 -1.25 -0.08 1.2 2.36 0.65 -0.19 0.44 -0.47 0.54 1.25 -0.04 1.78 -0.15 1.36 0.13 -0.54 1.23 1.11

Please let me i show that as a simple way.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

Now, i would like to create three submatrix (4*4) that they should be like these;

1st submatrix;

 1 2 3 4 2 5 6 7 3 6 8 9 4 7 9 10

2nd submatrix;

 11 12 13 14 12 15 16 17 13 16 18 19 14 17 19 20

and

...

How could i do it?

Many thanks!

4 REPLIES 4
Barite | Level 11

## Re: How to extract submatrix?

What is formula or the method you want to use to extract the sub-matrix?

Quartz | Level 8

## Re: How to extract submatrix?

I assume that

3rd submatrix:

 21 22 23 24 22 25 26 27 23 26 28 29 24 27 29 30

I also assume that table is a sas dataset:

data table;

input v1-v4;

cards;

3.201 0.104 7.66 -6.77

-2.09 6.14 2.54 -1.06

0.36 2.36 -1.05 1.8

0.89 -0.36 -1.25 -0.08

1.2     2.36 0.65 -0.19

0.44 -0.47 0.54 1.25

-0.04 1.78 -0.15 1.36

0.13 -0.54 1.23 1.11

;

run;

I developed the following solution that creates 3 SAS datasets: Submatrix1, Submatrix2 and Submatrix3:

data submatrix1(keep=colA:)
submatrix2(keep=colB:)
submatrix3(keep=colC:);
array vector(32);
array MatrixA(4,4);
array MatrixB(4,4);
array MatrixC(4,4);:

array ColA(4);
array ColB(4);
array ColC(4);
retain x 0;
do until (eof);
set table end=eof;
vector(x+1)=v1;
vector(x+2)=v2;
vector(x+3)=v3;
vector(x+4)=v4;
x+4;
end;
do i=1 to 4;
do j=1 to 4;
if min(i,j)=1 and (i=1 or j=1) then MatrixA(i,j)=max(i,j);
else if min(i,j)=2 and (i=2 or j=2) then MatrixA(i,j)=i+j+1;
else MatrixA(i,j)=i+j+2;
end;
end;
do i=1 to 4;
do j=1 to 4;
MatrixB(i,j)=MatrixA(i,j)+10;
MatrixC(i,j)=MatrixA(i,j)+20;
end;
end;
do i=1 to 4;
do j=1 to 4;
n=MatrixA(i,j);
colA(j)=vector(n);
n=MatrixB(i,j);
colB(j)=vector(n);
n=MatrixC(i,j);
colC(j)=vector(n);
end;
output submatrix1;
output submatrix2;
output submatrix3;
end;
run;

Is this what you need?

Calcite | Level 5

## Re: How to extract submatrix?

Thank you so much. For this example your code was true. Dear Torres, but when i try for another table file (rows=17; columns=7) it was more error. Please say me how can i run for this table (as follows).

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 .

For this table i need a program that extract submatrix as 8*8.

Quartz | Level 8

## Re: How to extract submatrix?

I do not understand the relation between the first matrix and the submatrixes you want to produce so you are right: Mi program does not work for the general case (witch I dont understand).

Anyway, I developed a Logic to populate any submatrix NxN from an initial value on. See this same entry in SAS/IML Software and Matrix computations.

CTorres

Discussion stats
• 4 replies
• 630 views
• 0 likes
• 3 in conversation