Solved
Contributor
Posts: 39

Delete "zero columns"

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

Accepted Solutions
Solution
‎04-02-2014 09:40 AM
SAS Super FREQ
Posts: 4,239

Re: Delete "zero columns"

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;

All Replies
SAS Super FREQ
Posts: 4,239

Re: Delete "zero columns"

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;

Contributor
Posts: 39

Re: Delete "zero columns"

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

SAS Super FREQ
Posts: 4,239

Re: Delete "zero columns"

Define

S = (C^=0);

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

Contributor
Posts: 39

Re: Delete "zero columns"

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

Solution
‎04-02-2014 09:40 AM
SAS Super FREQ
Posts: 4,239

Re: Delete "zero columns"

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;

Contributor
Posts: 39

Thank you Rick!!

Not applicable
Posts: 1

Re: Delete "zero columns"

Please check this works for you:

x=(C^=0);

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

🔒 This topic is solved and locked.