The macro functions %SYSFUNC and %QSYSFUNC can call
SAS language functions and functions written with
SAS/TOOLKIT software to generate text in the
macro facility. %SYSFUNC and %QSYSFUNC have one difference: the
%QSYSFUNC masks special characters and mnemonics and %SYSFUNC does
not. For more information about these functions, see
%SYSFUNC and %QSYSFUNC Functions.
%SYSFUNC arguments are
a single SAS language function and an optional format. See the following
examples:
%sysfunc(date(),worddate.)
%sysfunc(attrn(&dsid,NOBS))
You cannot nest SAS
language functions within %SYSFUNC. However, you can nest %SYSFUNC
functions that call SAS language functions, as in the following statement:
%sysfunc(compress(%sysfunc(getoption(sasautos)),%str(%)%(%')))
This example returns
the value of the SASAUTOS= system option, using the COMPRESS function
to eliminate opening parentheses, closing parentheses, and single
quotation marks from the result. Note the use of the %STR function
and the unmatched parentheses and quotation marks that are marked
with a percent sign (%).
All arguments in SAS
language functions within %SYSFUNC must be separated by commas. You
cannot use argument lists preceded by the word OF.
Because %SYSFUNC is
a macro function, you do not need to enclose character values in quotation
marks as you do in SAS language functions. For example, the arguments
to the OPEN function are enclosed in quotation marks when the function
is used alone but do not require quotation marks when used within
%SYSFUNC.
Here are some examples
of the contrast between using a function alone and within %SYSFUNC:
-
dsid = open("sasuser.houses","i");
-
dsid = open("&mydata","&mode");
-
%let dsid = %sysfunc(open(sasuser.houses,i));
-
%let dsid = %sysfunc(open(&mydata,&mode));
You can use %SYSFUNC
and %QSYSFUNC to call all of the DATA step SAS functions except the
ones that are listed in table
SAS Functions Not Available with %SYSFUNC and %QSYSFUNC. In the macro facility, SAS language functions called by
%SYSFUNC can return values with a length up to 32K. However, within
the DATA step, return values are limited to the length of a data set
character variable.
The %SYSCALL macro statement
enables you to use SAS language CALL routines with the macro processor,
and it is described in
Macro Statements.