Operator Mnemonic Precedence Definition Example

= EQ 6 equal A=B

# IN 6 equal to one

of a list**

A#B C D E

¬= ^= ~= NE 6 not equal* A NE B

> GT 6 greater than A>B

>= GE 6 greater than or

equal

A>=B

& AND 7 logical and A=B & C=D

| OR 8 logical or A=B | C=D

*The symbol to use depends on your keyboard.

** The default delimiter for list elements is a blank. For more information, see

“MINDELIMITER= System Option” on page 368.

** Before using the IN (#) operator, see “MINOPERATOR System Option” on page 370.

** When you use the IN operator, both operands must contain a value. If the operand contains a

null value, an error is generated.

CAUTION:

Integer expressions that contain exponential, multiplication, or division

operators and that use or compute values outside the range

-9,007,199,254,740,992 to 9,007,199,254,740,992 might get inexact results.

How the Macro Processor Evaluates Arithmetic

Expressions

Evaluating Numeric Operands

The macro facility is a string handling facility. However, in specific situations, the macro

processor can evaluate operands that represent numbers as numeric values. The macro

processor evaluates an expression that contains an arithmetic operator and operands that

represent numbers. Then, it temporarily converts the operands to numeric values and

performs the integer arithmetic operation. The result of the evaluation is text.

By default, arithmetic evaluation in most macro statements and functions is performed

with integer arithmetic. The exception is the %SYSEVALF function. For more

information, see “Evaluating Floating-Point Operands” on page 77. The following

macro statements illustrate integer arithmetic evaluation:

%let a=%eval(1+2);

%let b=%eval(10*3);

%let c=%eval(4/2);

%let i=%eval(5/3);

%put The value of a is &a;

%put The value of b is &b;

76 Chapter 6 • Macro Expressions

%put The value of c is &c;

%put The value of I is &i;

When you submit these statements, the following messages appear in the log:

The value of a is 3

The value of b is 30

The value of c is 2

The value of I is 1

Notice the result of the last statement. If you perform division on integers that would

ordinarily result in a fraction, integer arithmetic discards the fractional part.

When the macro processor evaluates an integer arithmetic expression that contains a

character operand, it generates an error. Only operands that contain characters that

represent integers or hexadecimal values are converted to numeric values. The following

statement shows an incorrect usage:

%let d=%eval(10.0+20.0); /*INCORRECT*/

The %EVAL function supports only integer arithmetic. The macro processor does not

convert a value containing a period character to a number, and the operands are

evaluated as character operands. This statement produces the following error message:

ERROR: A character operand was found in the %EVAL function or %IF

condition where a numeric operand is required. The condition was:

10.0+20.0

Evaluating Floating-Point Operands

The %SYSEVALF function evaluates arithmetic expressions with operands that

represent floating-point values. For example, the following expressions in the

%SYSEVALF function are evaluated using floating-point arithmetic:

%let a=%sysevalf(10.0*3.0);

%let b=%sysevalf(10.5+20.8);

%let c=%sysevalf(5/3);

%put 10.0*3.0 = &a;

%put 10.5+20.8 = &b;

%put 5/3 = &c;

The %PUT statements display the following messages in the log:

10.0*3.0 = 30

10.5+20.8 = 31.3

5/3 = 1.6666666667

When the %SYSEVALF function evaluates arithmetic expressions, it temporarily

converts the operands that represent numbers to floating-point values. The result of the

evaluation can represent a floating-point value, but as in integer arithmetic expressions,

the result is always text.

The %SYSEVALF function provides conversion type specifications: BOOLEAN,

INTEGER, CEIL, and FLOOR. For example, the following %PUT statements return 1,

2, 3, and 2 respectively:

%let a=2.5;

%put %sysevalf(&a,boolean);

%put %sysevalf(&a,integer);

%put %sysevalf(&a,ceil);

%put %sysevalf(&a,floor);

How the Macro Processor Evaluates Arithmetic Expressions 77

Get *SAS 9.4 Macro Language, 5th Edition* now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.