Calcite | Level 5

## 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?

1 ACCEPTED SOLUTION

Accepted Solutions
SAS Super FREQ

## 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";
``````

3 REPLIES 3
SAS Super FREQ

## 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";
``````

Calcite | Level 5

## 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

## 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;
``````

From The DO Loop