2017-10-20 119 views
3

我知道存在數據步DO循環的LEAVE語句來終止當前循環。但是,我找不到相應的 宏命令的文檔。SAS - 跳出宏%DO循環

我試過%LEAVE但似乎沒有定義。

  1. SAS沒有宏循環的break語句嗎?
  2. 如果不是,除了使用%GOTODATA _NULL_之外還有其他選項嗎?
+1

如果你想獲得更多有用的建議,請發表你的宏的一個簡單的例子,以及爲什麼你想'離開';最好的辦法取決於你的宏的細節。 – Joe

+1

數據步LEAVE只是帶有隱含LABEL的GOTO。 %GOTO是一個可以接受的選擇。 –

回答

2

不,不幸的是,宏語言(截至v9.4版本)沒有相當於leave

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

作爲解決方法,您將不得不手動觸發循環的退出條件。

4

如果你想徹底突破宏,你可以使用%abort(如果你想觸發一個錯誤)或%return(如果你不這樣做)。如果你只是想跳出一個循環並繼續處理其餘的宏,這些都沒有幫助,但是你可以將一個循環編寫成一個單獨的宏,並在更大的宏中調用它。

另一種選擇是,如果你想有一個休息狀態後,跳過一個迭代的其餘部分使用%do %while%do %until,並在每個循環的開始檢查你的退出條件,基於在循環中相同的條件下額外%if-%then-%do-%end塊中途遇到。

3

如果%RETURN語句不是一個選項,我通常使用%GOTO來突破宏循環。而且我有時也會使用GOTO來離開datastep循環,因爲:最節省CPU的編程方式取決於能夠不僅留下當前循環,而且還留下圍繞該循環的循環。

直到您可以指定想要突破的循環級別,如果您想以最高的效率和清晰度進行編程,偶爾會出現GOTO。這對於SAS,C,C++和任何其他使用循環結構的語言都是如此。如果沒有GOTO,你將不得不做一些愚蠢的事情,比如重複代碼和多次檢查相同的情況。