ループ処理のネスト階層をログにだしてデバックしやすくする方法

ループは深く掘りすぎると、どこで何してんだか分かりにくくなります。
さらにインデントもちゃんとされていないようなコードの検証作業などになると、ちょっとつらいです。

例えば以下のようなコードの場合、どの階層で割り当てステートメントが実行されているか
わかりにくいです。

data A1;
do X=1 to 2;
A=1;
do Y=1 to 2;
B=2;
do Z=1 to 2;
C=3;
output;
end;
D=4;
end;
E=5;
end;
F=6;
run;


そういった時は

data A1/nesting;
do X=1 to 2;
A=1;
do Y=1 to 2;
B=2;
do Z=1 to 2;
C=3;
output;
end;
D=4;
end;
E=5;
end;
F=6;
run;

と/nesting;をつけて実行してみましょう。

ログに




























ちょっと画像だと見にくいかもですが、
ループのカウンター変数(或いはuntilやwhileの場合はその部分)に赤下線が入ります。
endステートメントにも入ります。
赤下線でも別にエラーというわけではないです。

そしてその赤下線の下に
*** DO begin level 1 ***」や「 *** DO end level 1 ***」といったように、ループの開始位置と終了位置はここですよと教えてくれます。

ささやかなで単純な助けなので、つけなくてもループ文くらい読み解けるわって思うのですが、
案外馬鹿にできないもので、うまくいかずに泥沼化した時は素直につけるようにしています。



0 件のコメント:

コメントを投稿