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-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

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