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

How can we apply IF/THEN/ELSE statement to each element in a n*m matrix so that the result is also a n*m matrix of TRUE/FALSE?

 

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

Could you provide an example?

 

To get a boolean (0 or 1) matrix, just use a logical expression with a matrix:

proc iml;
x = {1 2,
     1 3,
     2 4};
b = (x > 2);
print b;

 

The IF-THEN/ELSE statement works on a scalar quantity.  The ANY function and ALL function can be used with the IF-THEN statement to make logical decisions.  For example:

if any(x) > 3 then print "Some element > 3";
else print "No element > 3";

if all(x) > 0 then print "All elements > 0";
else print "Some element <= 0";

 

For more information, see "IF-THEN logic with matrix expressions."

View solution in original post

3 REPLIES 3
Rick_SAS
SAS Super FREQ

Could you provide an example?

 

To get a boolean (0 or 1) matrix, just use a logical expression with a matrix:

proc iml;
x = {1 2,
     1 3,
     2 4};
b = (x > 2);
print b;

 

The IF-THEN/ELSE statement works on a scalar quantity.  The ANY function and ALL function can be used with the IF-THEN statement to make logical decisions.  For example:

if any(x) > 3 then print "Some element > 3";
else print "No element > 3";

if all(x) > 0 then print "All elements > 0";
else print "Some element <= 0";

 

For more information, see "IF-THEN logic with matrix expressions."

abbaskashif
Calcite | Level 5
Given a matrix x below, I would like to have a resultant matrix y having 1 for each element of x<0  else 0:
proc iml;
x = {1 2,
1 -3,
2 4};

IF x<0 THEN y=1;
ELSE y=0;
print y;

Resultant matrix should be:
y= {0 0,
0 1,
0 0}
The result however is a scalar y=0








 

Rick_SAS
SAS Super FREQ

 As I explained in my previous response, don't use the IF-THEN statement. Just create the binary matrix:

 

proc iml;
x = {1  2,
     1 -3,
     2  4};

y = (x<0);
print y;