Chapter Contents


SAS Macro Language: Reference

Deciding When to Use a Macro Quoting Function and Which Function to Use

Use a macro quoting function anytime you want to assign to a macro variable a special character that could be interpreted as part of the macro language. Special Characters and When Macro Quoting is Needed describes the special characters to mask when used as part of a text string and which macro quoting functions are useful in each situation.

Special Characters and When Macro Quoting is Needed
Special Character... Must Be Masked... Quoted by All Macro Quoting Functions? Remarks
+-*/<>=^|¬ ~ LE LT EQ NE GE GT AND OR NOT to prevent it from being treated as an operator in the argument of an explicit or implicit %EVAL function yes AND, OR, and NOT need to be masked because they are interpreted as mnemonic operators by an implicit %EVAL and by %SYSEVALF.
blank to maintain, rather than ignore, a leading, trailing, or isolated blank yes
; to prevent a macro program statement from ending prematurely yes
, (comma) to prevent it from indicating a new function argument, parameter, or parameter value yes
' " ( ) if it may be unmatched no Arguments that may contain quotation marks and parentheses should be masked with a macro quoting function so that the macro facility interprets the single and double quotation marks and parentheses as text rather than macro language symbols or possibly unmatched quotation marks or parentheses for the SAS language. With %STR, %NRSTR, %QUOTE, and %NRQUOTE, unmatched quotation marks and parentheses must be marked with a % sign. You do not have to mark unmatched symbols in the arguments of %BQUOTE, %NRBQUOTE, and %SUPERQ.
%name &name
(depends on what the expression might resolve to) no %NRSTR, %NRBQUOTE, and %NRQUOTE mask these patterns. To use %SUPERQ with a macro variable, omit the ampersand from name.

The macro facility allows you as much flexibility as possible in designing your macros. You need to mask a special character with a macro quoting function only when the macro processor would otherwise interpret the special character as part of the macro language rather than as text. For example, in this statement you must use a macro quoting function to mask the first two semicolons to make them part of the text:

%let p=%str(proc print; run;);

However, in the macro PR, shown here, you do not need to use a macro quoting function to mask the semicolons after PRINT and RUN:

%macro pr(start);
   %if &start=yes %then
         %put proc print requested;
         proc print;
%mend pr;

Because the macro processor does not expect a semicolon within the %DO group, the semicolons after PRINT and RUN are not ambiguous, and they are interpreted as text.

Although it is not possible to give a series of rules that cover every situation, the following sections describe how to use each macro quoting function. Summary of Special Characters and Macro Quoting Functions, later in this chapter, provides a summary of the various characters that may need masking and of which macro quoting function is useful in each situation.

Note:   You can also perform the inverse of a macro quoting function--that is, remove the tokenization provided by macro quoting functions. For an example of when the %UNQUOTE function is useful, see Unquoting Text.  [cautionend]

Chapter Contents



Top of Page

Copyright 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.