2016年1月14日木曜日

「DO UNTIL」と「DO WHILE」の違い。


「DO UNTILE」と「DO WHILE」の書き方とその違いを紹介。

まずイメージから。。(正確な動きはちょっと違うかも)


















DO UNTIL の例

data DT1;
   X=0;
   do until (X=2);
       X+1;
       put X;
   end;
run;

ログ
1
2



DO WHILE の例

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 件のコメント:

コメントを投稿