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

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

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

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;

View solution in original post

7 REPLIES 7
Rick_SAS
SAS Super FREQ

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;

oriti
Fluorite | Level 6

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

Rick_SAS
SAS Super FREQ

Define

S = (C^=0);

S is a binary 0/1 matrix, so use the previous code I sent.

oriti
Fluorite | Level 6

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

Rick_SAS
SAS Super FREQ

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;

oriti
Fluorite | Level 6

Thank you Rick!!

gin
Calcite | Level 5 gin
Calcite | Level 5

Please check this works for you:

x=(C^=0);

Cnew=C[,loc(x[+,]^=0)];

sas-innovate-white.png

Missed SAS Innovate in Orlando?

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.

 

Register now

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