我知道存在數據步DO循環的LEAVE語句來終止當前循環。但是,我找不到相應的 宏命令的文檔。SAS - 跳出宏%DO循環
我試過%LEAVE
但似乎沒有定義。
- SAS沒有宏循環的break語句嗎?
- 如果不是,除了使用
%GOTO
或DATA _NULL_
之外還有其他選項嗎?
我知道存在數據步DO循環的LEAVE語句來終止當前循環。但是,我找不到相應的 宏命令的文檔。SAS - 跳出宏%DO循環
我試過%LEAVE
但似乎沒有定義。
%GOTO
或DATA _NULL_
之外還有其他選項嗎?不,不幸的是,宏語言(截至v9.4版本)沒有相當於leave
。
您可以在Macro Language Dictionary的文檔中看到宏語句的完整列表。
作爲解決方法,您將不得不手動觸發循環的退出條件。
如果你想徹底突破宏,你可以使用%abort
(如果你想觸發一個錯誤)或%return
(如果你不這樣做)。如果你只是想跳出一個循環並繼續處理其餘的宏,這些都沒有幫助,但是你可以將一個循環編寫成一個單獨的宏,並在更大的宏中調用它。
另一種選擇是,如果你想有一個休息狀態後,跳過一個迭代的其餘部分使用%do %while
或%do %until
,並在每個循環的開始檢查你的退出條件,基於在循環中相同的條件下額外%if-%then-%do-%end
塊中途遇到。
如果%RETURN語句不是一個選項,我通常使用%GOTO來突破宏循環。而且我有時也會使用GOTO來離開datastep循環,因爲:最節省CPU的編程方式取決於能夠不僅留下當前循環,而且還留下圍繞該循環的循環。
直到您可以指定想要突破的循環級別,如果您想以最高的效率和清晰度進行編程,偶爾會出現GOTO。這對於SAS,C,C++和任何其他使用循環結構的語言都是如此。如果沒有GOTO,你將不得不做一些愚蠢的事情,比如重複代碼和多次檢查相同的情況。
如果你想獲得更多有用的建議,請發表你的宏的一個簡單的例子,以及爲什麼你想'離開';最好的辦法取決於你的宏的細節。 – Joe
數據步LEAVE只是帶有隱含LABEL的GOTO。 %GOTO是一個可以接受的選擇。 –