Sas 在宏函数之外定义宏变量的优点
我有一位固执的讲师,他坚持在宏语句的括号内定义所有宏变量,如下所示Sas 在宏函数之外定义宏变量的优点,sas,sas-macro,sas-studio,Sas,Sas Macro,Sas Studio,我有一位固执的讲师,他坚持在宏语句的括号内定义所有宏变量,如下所示 %MACRO TEST(Var1= , Var2= , Var3= ); 这有什么好处?实际上这样定义函数有什么好处: %LET var1= <Insert long list of 50 variables here>; %LET var2= <name of input data>; %LET var3= <group by variables>; %MACRO TEST; %LET
%MACRO TEST(Var1= , Var2= , Var3= );
这有什么好处?实际上这样定义函数有什么好处:
%LET var1= <Insert long list of 50 variables here>;
%LET var2= <name of input data>;
%LET var3= <group by variables>;
%MACRO TEST;
%LET var1=;
%设var2=;
%设var3=;
%宏观测试;
我认为第二种选择提供了清晰和整洁的编码结构,有人能指出这两种方法的其他优点或缺点吗?两个要点:
- 全局变量的使用是非常重要的
- 使用您的系统,如何在代码的不同位置编写对同一宏的多个调用?如何跟踪哪些参数列表对应于哪些宏调用
- 全局变量的使用是非常重要的
- 使用您的系统,如何在代码的不同位置编写对同一宏的多个调用?如何跟踪哪些参数列表对应于哪些宏调用
- 两个要点:
%Let year = 2019;
%Let State = CA;
%let Dept = DOE;
%macro MakeRpt;
%include "MakeData.sas";
.
. more %include statements
.
%include "GenerateReport.sas";
%mend;
%makeRpt;
但是,如果我正在制作一个宏“实用程序”,用户需要时可以调用它,那么使用本地宏最有意义。这实际上是一个如何使用宏的问题,即全局还是局部更有意义。这取决于宏的使用方式。全局宏非常有帮助,正如您所指出的,如果正确使用全局宏,则可以提供清晰性。例如,如果我有一堆SAS程序需要运行以生成数据集或报告,我会将它们放在包装程序中并使用全局宏
%Let year = 2019;
%Let State = CA;
%let Dept = DOE;
%macro MakeRpt;
%include "MakeData.sas";
.
. more %include statements
.
%include "GenerateReport.sas";
%mend;
%makeRpt;
但是,如果我正在制作一个宏“实用程序”,用户需要时可以调用它,那么使用本地宏最有意义。这实际上是一个如何使用宏的问题,即全局还是局部更有意义
%macro test(var1 = , var2 = , var3 = 25);
宏调用/执行:
%test(var1 = 5, var2 = 4);
var3在宏中有什么值?
%macro test(var1 = , var2 = , var3 = 25);
宏调用/执行:
%test(var1 = 5, var2 = 4);
var3在宏中有什么值?
附言:一般来说,当你开始学习的时候,99%的几率你的讲师是正确的。假设这有助于你以不同的方式构建你的问题,而不是试图证明某人错了(这就是你的问题的来龙去脉),那么你将着眼于理解事情是如何运作的。此外,你的讲师也可能在线,因此如果他们在某个时候看到你的问题,你不会被认为是一个无所不知的孩子。但最终这是你的选择 您唯一希望这样做的时候是,如果您有全局变量将出现在整个程序中。例如,有特殊的设置或初始化程序来保存通常引用的值并不少见,尤其是在开发和生产之间。这可以使升级程序时更容易处理,或者在以后某些内容发生更改(例如目录位置或主机名)时更容易调整 例如,下面的宏可以更改一些全局宏变量以指向特定的目录