「DO UNTILE」と「DO WHILE」の書き方とその違いを紹介。
まずイメージから。。(正確な動きはちょっと違うかも)
data DT1;
X=0; do until (X=2); X+1; put X; end; run; ログ 1 2 |
data DT2;
X=0; do while (X<=2); X+1; put X; end; run; ログ 1 2
3
|
ログみて、「あれ? X<=2 の間ループする条件なのに、なぜX=3が出力されてるんだ?」 と思った方は、記事先頭にあるイメージを見ながら 「条件式の真偽判定を行うタイミング」 に注意して考えてみてください。
ちなみに上のような勘違いしやすい書き方より、以下の方がいいかも。(赤字は上の例からの変更箇所)
data DT2;
X=1; do while (X<=3); put X; X+1; end; run; ログ 1 2 3 |
条件式が 「X<=3」 で、ログに出力している値も3以下なので、
こっちの方が条件式を見ただけで、パッと見の動きが分かり易いです。
こっちの方が条件式を見ただけで、パッと見の動きが分かり易いです。
DO UNTILに「絶対に成立しない条件式」を入れたり、
DO WHILEに「常に成立し続ける条件式」を入れると、無限ループになってしまいます。
Windows環境だと、Ctrl + Pause(Break) ⇒ 「サブミットしたステートメントを取り消す」で無限ループから抜けられますが、SAS Enterprise Guideとか他の環境は使った事ないので通用するか分からないし、そもそもPause(Break)キーがないノートPCはどうすればいいんだって感じで、最悪強制終了するはめになるのでご注意ください。。
「do i = 1 to 3」 みたいな書き方で代用できるなら、そちらを使うほうが安全かもです。
⇒ DOループ入門
0 件のコメント:
コメントを投稿