SAS - 跳出宏 %DO 循环
SAS - Break out of macro %DO loop
我知道存在用于数据步 DO 循环的 LEAVE 语句来终止当前循环。但是,我找不到相应的文档
宏命令。
我试过 %LEAVE
但似乎没有定义。
- SAS 没有宏循环的 break 语句吗?
- 如果没有,除了使用
%GOTO
或 DATA _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,您将不得不做一些愚蠢的事情,例如重复代码和多次检查相同的条件。
我知道存在用于数据步 DO 循环的 LEAVE 语句来终止当前循环。但是,我找不到相应的文档 宏命令。
我试过 %LEAVE
但似乎没有定义。
- SAS 没有宏循环的 break 语句吗?
- 如果没有,除了使用
%GOTO
或DATA _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,您将不得不做一些愚蠢的事情,例如重复代码和多次检查相同的条件。