SAS Employee

IF/THEN element wise logic in IML

Say I have the matrices:

A = { 1 -2 3,

-1 1 5,

3 -2 -4};

B = { 0 0 0,

0 0 0,

0 0 0};

And I would like to apply the following logic: If a value of A is less than zero (A<B), then keep the value. If not then double the value.

My goal is the matrix

C = { 2  -2 6,

-1 2 10,

6 -2 -4};

Can this be done in IML?  I am running into issues where the comparison is being treated as an ALL function.

Or, if I use a statement such as C=A>B then I am returned a matrix of binary values based on the comparison.

Thanks!

1 ACCEPTED SOLUTION

Accepted Solutions
SAS Super FREQ

Re: IF/THEN element wise logic in IML

You don't need the matrix B.  Use the CHOOSE function as follows:

C = choose(A<0, A, 2*A);

For more information about the CHOOSE function, see Complex assignment statements: CHOOSE wisely - The DO Loop

2 REPLIES 2
SAS Super FREQ

Re: IF/THEN element wise logic in IML

You don't need the matrix B.  Use the CHOOSE function as follows:

C = choose(A<0, A, 2*A);

For more information about the CHOOSE function, see Complex assignment statements: CHOOSE wisely - The DO Loop

SAS Super FREQ

Re: IF/THEN element wise logic in IML

If you do need to use IF-THEN/ELSE logic on matrices, read this article: IF-THEN logic with matrix expressions - The DO Loop

From The DO Loop