Macro Variables存储在“Symbol Table”中。它是由Macro Processor在SAS启动时自动创建并维护的。SAS提供了一张视图来供我们查看Symbol Table中的内容,其位于SASHELP逻辑库下:“SASHELP.VMACRO”
Symbol Table分为Global Symbol Table、Local Symbol Table(Automatic Macro Variables中了除了SYSPBUFF,都属于Global)
因此,上面提到的SASHELP.VMACRO,准确来讲只包含Global Symbol Table中的内容。Local Symbol Table仅存在于Macro Program运行的阶段,无法像Global Symbol Table那样直接通过视图来查看
创建局部宏变量,建议使用%LOCAL语句。如果不使用%LOCAL语句,而且%LET语句中的宏变量已经是一个全局宏变量,那么就会修改全局宏变量的值,而不会再创建一个宏变量
SAS程序中主要包含DATA步、PROC步、宏程序这三部分;在一个SAS程序中,宏程序之外的部分(即%MACRO语句和%MEND语句之外的部分)都称之为Open Code
间接引用
通过一个Macro Variable得到另外一个Macro Variable的取值。
对于含有多个“&”的间接引用方式,Macro Processor会进行多次解析,得到最终的结果
首先需要记住三点:
-
如果解析过程中遇到连续的两个“&&”会把它解析为一个“&”;
-
如果解析完的结果中还有“&”,会触发第二次解析;
-
如果解析过程中遇到“.”,当做分隔符处理,其不会出现在解析结果中;
上面这些间接引用好像都是两层的,有没有更多层级的引用?不用怀疑,绝对有。想要多少层都可以,只需要加“&”就可以。