使用Autocall Macro

上面两种方法其实可以归结为同一种方法,只不过实现的路径不同。但都存在一个缺点:如果程序文件中包含很多宏程序的定义,而往往有时候只需要调用其中的一个宏,那么其他宏程序的编译其实就是多余的。

Autocall Macro就可以解决这个问题,通过使用这种方式,会在调用宏的时候,SAS自动搜索相对应宏程序的代码,然后对其进行编译(在同个SAS会话中,只在第一次调用时编译,第二次调用会跳过编译过程),进而运行该宏。所以称之为Autocall。

此种方式又可以根据存储方式的不同分为两种,下面分别进行介绍。

3.1. 将目录作为Autocall库

要实现此种方式,需要以下三个步骤:

  1. 将所有的宏程序分别存储到一个SAS程序文件中,并且以宏程序的名字命名该程序文件。然后将所有的宏程序文件放到一个特定的目录下;

  2. 使用FILENAM语句将存储所有宏程序文件的目录关联一个FILEREF;

  3. 使用MAUTOSOURCE系统选项打开Autocall机制(默认打开),并且通过SASAUTO=系统选项将该FILEREF指定为Autocall库;

在完成上面三个步骤后就可以直接调用其中的宏使用,在调用的时候SAS会自动搜索该宏对应的宏程序文件(这也是为什么要求程序文件名必须跟宏的名字一致的原因);然后进行编译,存储到WORK.SASMACR中。

1

将宏程序分别存储到不同程序文件中

2

使用FILENAME语句

filenamemymacros "D:sasmacrosautocall_macros_directory";

3

使用系统选项

options mautosource sasautos=(sasautos mymacros);

接下来,就可以直接调用宏程序使用了。例如:

小贴士

需要注意SASAUTOS=系统选项,因为SAS在启动时会初始化自带的一些Autocall库,所以SASAUTOS会有默认的值。如果直接覆盖SASAUTOS的值,那么SAS系统自带的宏将会不可用。因此在赋值的时候,要加上默认的SASAUTOS值。