唯一一次你想要这样做是如果你有将出现在整个程序中的全局变量。例如,使用特殊的设置或初始化程序来保存常用值的情况并不少见,尤其是在开发和生产之间进行时。这可以在推广程序时使事情变得更容易处理,或者如果稍后某些事情发生变化(例如目录位置或主机名),则更容易调整。
例如,下面的宏可以更改一些全局宏变量以指向在两个服务器之间不同的某些目录,具体取决于代码运行的位置。
%macro dev_prod;
%global directory inlib outlib;
%if(&syshostname. = production-server.company.com) %then %do;
%let directory = C:\prodlocation;
%let inlib = C:\prodlib;
%let outlib = C:\outlib;
%end;
%else %if(&syshostname. = dev-server.company.com) %then %do;
%let directory = C:\devlocation;
%let inlib = C:\devlib;
%let outlib = C:\outlib;
%end;
%mend;
%dev_prod;
通常,您希望在执行特定功能的宏中使用局部宏变量。例如,以下宏对数据集上的变量进行回归:
%macro regression(data=, dep=, indep=);
proc reg data=&data.;
model &dep. = &indep.;
run;
%mend;
%regression(data=sashelp.cars, dep=horsepower, indep=msrp);