gpt4 book ai didi

宏中的 SAS 宏

转载 作者:行者123 更新时间:2023-12-02 09:10:13 31 4
gpt4 key购买 nike

我有一个关于 %macro 的问题。我可以在另一个 %宏中设置 %宏吗?

简短示例 - 情况“图片”:

%macro Tier_1();

%do Iter = 1 to &i;

%macro Tier_2()

proc sql noprint;
select
1*&Iter into :var
from work._PRODSAVAIL
;quit;

%put &var;

%mend;
%Tier_2();
%end;

%mend;
%Tier_1();

最佳答案

您的问题的答案是“是的,这是可能的”。但风格很差。如果您只是将 %Tier_2 的宏定义移至宏 Tier_1 之外,但将调用保留在其中,则会出现与上述相同的结果。

%macro tier_1();

...

%Tier_2();
%mend tier_1();

%macro tier_2();
...
%mend tier_2;

%tier_1();

正如您在上面看到的,您甚至不必以特定方式对它们进行排序 - 只要在执行宏之前编译它们就可以正常工作。

将一个宏定义放入另一个宏定义中唯一有意义的情况是外部宏以某种方式修改了内部宏,因此有必要重新编译每次执行外部宏时都会调用内部宏。

虽然这是一个理论上的用例,但我认为您在实践中可能不会遇到这种情况;有很多其他方法可以修改内容而不实际修改宏代码本身,因此它被认为是糟糕的编程风格,应该避免。您增加了(最小的,但有些)开销,但没有带来真正的好处,并且使代码更难以理解。

关于宏中的 SAS 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53231450/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com