Dear all,
I would like to find an efficient way do delete zero column.
(part of my simulation results are matrix with zero columns
so I can't invert the matrix and it ends with empty value).
for example:
C={1 1 0 0 0,
1 0 0 1 0,
1 0 0 1 0}
I want to get:
D={1 1 0,
1 0 1,
1 0 1}
Thank you,
Orit
You must have misunderstood my suggestion. You use S to find and extract the rows of the original matrix:
S = (C^=0);
cols = loc(S[+, ]>0);
if ncol(cols)>0 then
D = C[,cols];
else
D = C;
Are your matrix elements always binary 0/1? If so, just sum down the columns and keep the colums that sum to any positive value:
cols = loc(C[+, ]>0);
if ncol(cols)>0 then
D = C[,cols];
else
D = C;
Thank you Rick!
But No, my matrix contains positive and negative number in their columns.
Like
C={5 6 0 0 0,
-5 0 0 -8 0,
0 0 0 7 0}
How do you recommend do solve that ?
Thanks,
Orit
Define
S = (C^=0);
S is a binary 0/1 matrix, so use the previous code I sent.
That is elegant,thanks!
The only problem is, that you end this code with the binary matrix.
I need the original matrix because I use it for other computations.(for ols coefficients)
How do you recommend to do that?
Thanks,
Orit
You must have misunderstood my suggestion. You use S to find and extract the rows of the original matrix:
S = (C^=0);
cols = loc(S[+, ]>0);
if ncol(cols)>0 then
D = C[,cols];
else
D = C;
Thank you Rick!!
Please check this works for you:
x=(C^=0);
Cnew=C[,loc(x[+,]^=0)];
Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.