ラベル nesting の投稿を表示しています。 すべての投稿を表示
ラベル nesting の投稿を表示しています。 すべての投稿を表示

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

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

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

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 ***」といったように、ループの開始位置と終了位置はここですよと教えてくれます。

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