Statistical programming, matrix languages, and more

SAS IML IF/THEN/ELSE

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 13
Accepted Solution

SAS IML IF/THEN/ELSE

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?

 


Accepted Solutions
Solution
‎01-18-2017 04:00 PM
SAS Super FREQ
Posts: 3,230

Re: SAS IML IF/THEN/ELSE

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


All Replies
Solution
‎01-18-2017 04:00 PM
SAS Super FREQ
Posts: 3,230

Re: SAS IML IF/THEN/ELSE

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."

Occasional Contributor
Posts: 13

Re: SAS IML IF/THEN/ELSE

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








 

SAS Super FREQ
Posts: 3,230

Re: SAS IML IF/THEN/ELSE

 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;

 

 

Post a Question
Discussion Stats
  • 3 replies
  • 196 views
  • 0 likes
  • 2 in conversation