SAS - 跳出宏 %DO 循环

SAS - Break out of macro %DO loop

我知道存在用于数据步 DO 循环的 LEAVE 语句来终止当前循环。但是,我找不到相应的文档 宏命令。

我试过 %LEAVE 但似乎没有定义。

  1. SAS 没有宏循环的 break 语句吗?
  2. 如果没有,除了使用 %GOTODATA _NULL_ 之外还有其他选择吗?

不,不幸的是在宏语言(从 v9.4 开始)中没有 leave 的等价物。

您可以在 Macro Language Dictionary 的文档中看到完整的宏语句列表。

作为解决方法,您必须手动触发循环的退出条件。

如果你想完全跳出一个宏,你可以使用%abort(如果你想触发错误)或%return(如果你不想)。如果您只想跳出循环并继续执行宏的其余部分,这些方法将无济于事,但您可以将循环编写为单独的宏并在更大的宏中调用它。

另一种选择是使用 %do %while%do %until 并在每个循环开始时检查退出条件,如果在循环中根据相同条件使用额外的 %if-%then-%do-%end 块您想在中途满足中断条件后跳过迭代的其余部分。

如果 %RETURN 语句不是一个选项,我通常使用 %GOTO 来跳出宏循环。我有时也使用 GOTO 来离开数据步循环,因为:最 CPU 最有效的编程方式取决于不仅能够离开当前循环,还能够离开围绕它的循环。

除非您可以指定要跳出的循环级别,否则如果您想以最高效率和清晰度进行编程,则无法绕过偶尔出现的 GOTO。对于 SAS、C、C++ 和任何其他使用循环结构的语言也是如此。如果没有 GOTO,您将不得不做一些愚蠢的事情,例如重复代码和多次检查相同的条件。