Casser Notes

SASメインで使っていたエンジニアのステップアップの記録

多重ネストマクロプログラムのデバッグつらい

PL業務ばかりやっていたけど、手を動かしたい&手も足りないのもあって、自分にプログラム開発タスクを振った

 

ここ最近は他の案件でもPLをやることが多く、正直自分でプログラムを書くのが何年ぶりか…という感じ

(前の案件はDIS、EGのGUIメインだったし)

 

それをやり始めたはいいけど、プログラム開発の勘所が自分から全く失われていることに気づく

これが、自分のずっとなりたくないと思っていたリーダーの姿、自分がそうなりつつあることにまた危機感を覚える

 

 

詰まったところは、既存のマクロのネストが深く、デバッグに苦労してる

 

知っている環境ならこれがここ読んでるのね、と分かるけど、あまり知らない環境だと、

このマクロはどこにあってどこで定義されてんのか、がいまいちよく分からない

 

例えば

◾️createList.sas

%macro main();

〜処理いっぱい〜

%macro step1();

%macro step1_1();

%let whereStr=%str(なんたら条件);

%commonExtract(data001,&whereStr);

〜処理いっぱい〜

%if &extractCnt. = 0 then do;

    %goto :zeroEnd;
%end;

%mend;

%step1_1();

%mend;

%step1();

〜処理いっぱい〜

%mend;

%main();

みたいなのがあって、&extractCntってどこで作ってんの…と見ると

◾️ batAutoexec.sas

%macro commonExtract(tabName,whereJoken);

proc sql noprint;

create table extractTab as

select count into:extractCnt

from &tabname.

where (1=1) &whereJoken;

;

quit;

%mend;

 

をsysinのプログラムからさらに%includeしてたりする

 

この辺りの値の遷移とかがどうしても脳内でマッピングできないし、プログラム間のCRUDみたいなのは本当はあるべきなのかな?

どれがどれ読んでるかみたいな紐付きがピンとこない

 

 

あとは、マクロが何層もネストされてるのでどこでエラー出てるのかもよく分かんないし、

ステップ実行でデバッグしたくとも、そこだけオープンコードで実行するもの比較的苦労する

 

せっかくEGで実装されたDATAステップデバッガもマクロ内には使えない…

 

 

オープンコードで書いてからマクロに起こす、が定石だけど、既存の知らないマクロゴリゴリプログラムを書き直すときのテクニックが知りたいところ

 

とはいえ、自分の課題、足りないところが分かったので昨日も楽しかった

 

P.S.

GMOさんのイベントも申し込んでたけど、この開発の遅れで行けなかった…