In the %IF statement, the values of WORD being tested are ambiguous — they could
also be interpreted as the numeric operators AND and OR. Therefore, SAS generates the
following error messages in the log:
ERROR: A character operand was found in the %EVAL function or %IF
condition where a numeric operand is required. The condition
was:word = and or &word = but or &word = or
ERROR: The macro will stop executing.
To fix this problem, use the quoting functions %BQUOTE and %STR, as in the
following corrected program:
%macro conjunct(word= );
%if %bquote(&word) = %str(and) or %bquote(&word) = but or
%bquote(&word) = %str(or) %then
%do %put *** &word is a conjunction. ***;
%do %put *** &word is not a conjunction. ***;
In the corrected program, the %BQUOTE function quotes the result of the macro
variable resolution (in case the user passes in a word containing an unmatched quotation
mark or some other odd value). The %STR function quotes the comparison values AND
and OR at compile time, so they are not ambiguous. You do not need to use %STR on
the value BUT, because it is not ambiguous (not part of the SAS or macro languages).
For more information, see Chapter 7, “Macro Quoting,” on page 81.
Using System Options to Track Problems
The SAS system options MLOGIC, MLOGICNEST, MPRINT, MPRINTNEST, and
SYMBOLGEN can help you track the macro code and SAS code generated by your
macro. Messages generated by these options appear in the SAS log, prefixed by the
name of the option responsible for the message.
Note: Whenever you use the macro facility, use the following macro options: MACRO,
MERROR, and SERROR. SOURCE is a system option that is helpful when using
the macro facility. It is also helpful to use the SOURCE2 system option when using
Although the following sections discuss each system option separately, you can, of
course, combine them. However, each option can produce a significant amount of
output, and too much information can be as confusing as too little. So, use only those
options that you think you might need and turn them off when you complete the
Tracing the Flow of Execution with MLOGIC
The MLOGIC system option traces the flow of execution of your macro, including the
resolution of parameters, the scope of variables (global or local), the conditions of macro
expressions being evaluated, the number of loop iterations, and the beginning and end of
each macro execution. Use the MLOGIC option when you think a bug lies in the
program logic (as opposed to simple syntax errors).
136 Chapter 10 • Macro Facility Error Messages and Debugging