关于宏的系统选项
MCOMPILENOTE=NONE|NOAUTOCALL|ALL
该系统选项控制是否在日志当中显示宏程序编译时的信息,默认值为NONE,也就是不显示。其中NOAUTOCALL针对的是Autocall Macro
MEXECNOTE | NOMEXECNOTE
该系统选项与MCOMPILENOTE是类似的功能,用于控制当调用一个宏程序时,是否在日志当中显示相应的信息,默认值为NOMEXECNOTE
MERROR|NOMERROR
该系统选项控制当调用一个宏程序且找不到该程序时,是否在日志中显示一条警告信息。默认值为MERROR,会在日志当中显示警告信息
SERROR | NOSERROR
该系统选项控制当使用一个宏变量且找不到该宏变量时,是否在日志中显示一条警告信息。默认值为SERROR,会在日志当中显示警告信息
MCOMPILE|NOMCOMPILE
该系统选项用于控制是否允许定义一个新的宏程序,默认值为MCOMPILE。如果将其修改为NOCOMPILE,则不能再定义一个新的宏程序
SYSPARM=
该选项可存储一个文本字符串,最大可存储200个字节的字符。存储后的值可在DATA步中使用SYSPARM()函数获取,也可以通过宏变量SYSPARM获取(该宏变量是SAS系统提供的全局宏变量,可在任何地方使用)
MLOGIC|NOMLOGIC
MLOGICNEST|NOMLOGICNEST
MPRINT|NOMPRINT
MPRINTNEST|NOMPRINTNEST
SYMBOLGEN|NOSYMBOLGEN
这5个选项经常会用于调试宏程序的过程中,可以在日志中显示宏程序执行过程中生成的SAS代码及相关的信息。具体来说:
-
MLOGIC、MLOGICNEST会将宏程序执行的逻辑在日志中显示出来,其中后者会将嵌套的逻辑也显示出来;
-
MPRINT、MPRINTNEST会将宏程序生成的SAS代码在日志中显示出来,其中后者会将嵌套宏的信息也显示出来;
-
SYMBOLGEN会将宏执行过程中所有宏变量的解析的值在日志中显示出来。
MFILE | NOMFILE
该选项可以将MPRING选项生成的SAS代码输出到外部文件中,该选项必须和MPRINT选项一起使用。同时,输出的外部文件通过FILENEMA语句定义,fileref必须为MPRINT
DATA步函数及call例程
SYMEXIST(argument)
该函数与宏函数%SYMEXIST()是相同的功能,用于判断一个宏变量是否存在。如果存在,返回1;否则,返回0。只不过SYMEXIST只能用在DATA步中,其中参数可以直接传递宏变量的名字;也可以是某个变量,该变量的值为宏变量的名字
SYMGET(argument)
该函数用于在DATA步执行的阶段获取指定宏变量的值,返回值为字符串。其中参数可以直接传递宏变量的名字;也可以是某个变量,该变量的值为宏变量的名字。
需要特别注意的是,SYMGET是在DATA步执行阶段获取指定宏变量的值
SYMGLOBAL(argument)
该函数与宏函数%SYMGLOBL的功能是一样的,用于判断一个宏变量是否是全局宏变量。如果是,则返回1;否则,返回0。只不过该函数是用在DATA步中。其中参数可以直接传递宏变量的名字;也可以是某个变量,该变量的值为宏变量的名字
SYMLOCAL(argument)
该函数与宏函数%SYMLOCAL的功能是一样的,用于判断一个宏变量是否是局部宏变量。如果是,则返回1;否则,返回0。只不过该函数是用在DATA步中。其中参数可以直接传递宏变量的名字;也可以是某个变量,该变量的值为宏变量的名字
CALL SYMDEL(macro-variable <, option>)
该call例程与宏函数%SYMDEL是相同的功能,用于删除一个宏变量。只不过该例程是用在DATA步中。其中参数可以直接传递宏变量的名字;也可以是某个变量,该变量的值为宏变量的名字;option为NOWARN。默认情况下,如果要删除的宏变量不存在,则会有一条警告信息在日志中。指定该选项后,则不再显示该警告信息
CALL EXECUTE(argument);
该CALL例程可在当前DATA步结束后,执行参数中的内容。该参数可以以下几种形式:
-
用引号引起来的代码;
-
变量名,该变量名中保存某个宏程序的调用;或者某个需要指定的代码;
-
用单引号引起来的宏程序的调用;
RESOLVE(argument)
该函数在DATA执行的时候解析宏变量及宏程序的调用,并且返回解析后的内容。可以实现SYMGET的功能,获取宏变量的值,此外还可以解析宏程序的结果