SAS - 突破宏%DO循环

时间:2017-10-20 15:48:59

标签: sas sas-macro

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

我已尝试%LEAVE,但似乎没有定义。

  1. SAS没有宏循环的break语句吗?
  2. 如果没有,是否还有其他选项使用%GOTODATA _NULL_

3 个答案:

答案 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

的文档中查看完整的宏语句列表

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