【发布时间】:2024-01-22 18:32:01
【问题描述】:
为了重构一个程序,我将一个我想抽象的复杂过程放在一个宏中。
%macro BlackBox();
data _null_;
put "This represents a complex process I want to abstract.";
run;
%mend;
该过程需要连续发生多次,因此显而易见的解决方案是将其置于循环中。
data _null_;
do i = 1 to 3;
%BlackBox();
end;
run;
然而,这会产生以下错误。
ERROR 117-185: There was 1 unclosed DO block.
发生了什么?
我的最佳猜测是 SAS 试图在数据步骤中运行数据步骤。
我发现我可以通过将我的循环包含在一个宏中然后立即调用该宏来避免这个错误。
%macro PerformDoLoop();
%do i = 1 %to 3;
%BlackBox();
%end;
%mend;
%PerformDoLoop;
所有这些似乎都是处理基本编程任务的迂回方式。我希望更多地了解数据步骤方法失败的原因能让我深入了解如何更优雅地完成这项任务。
请理解,这是一个用于说明我遇到的错误的简化示例。宏的真实实例可以接受参数或返回值。
【问题讨论】:
标签: macros sas abstraction