我知道存在用于终止当前循环的数据步骤DO循环的LEAVE语句。但是,我找不到相应的文档 宏命令。
我已尝试%LEAVE
,但似乎没有定义。
%GOTO
或DATA _NULL_
?答案 0 :(得分:4)
如果你想彻底摆脱一个宏,你可以使用%abort
(如果你想触发错误)或%return
(如果你不想)。如果你只想突破循环并继续使用宏的其余部分,这些将无济于事,但你可能会将循环写为一个单独的宏并在一个更大的宏内调用它。
另一种选择是使用%do %while
或%do %until
并在每个循环开始时检查退出条件,如果你想要的话,根据循环内的相同条件使用额外的%if-%then-%do-%end
块在中途遇到休息条件后跳过剩下的迭代。
答案 1 :(得分:3)
如果%RETURN语句不是一个选项,我通常使用%GOTO来打破宏循环。我有时也会使用GOTO来保留datastep循环,因为:最节省CPU的编程方式取决于不仅能够保留当前循环,还能保留围绕该循环的循环。
直到你可以指定你想要突破的循环级别,如果你想以最大的效率和清晰度进行编程,那么偶尔的偶然GOTO是没有办法的。对于SAS,C,C ++和使用循环结构的任何其他语言都是如此。如果没有GOTO,你将不得不做一些愚蠢的事情,比如重复代码并多次检查相同的条件。
答案 2 :(得分:2)
不,遗憾的是,宏语言中没有等效的leave
(截至v9.4)。
您可以在Macro Language Dictionary。
的文档中查看完整的宏语句列表作为一种解决方法,您必须手动触发循环的退出条件。