私はマクロ変数を使って作業することは比較的初心者ですが、スタックしているようです。シンボル参照 - DO LOOP内のSCAN関数
テーブルを開き、マクロ変数& TBL_DIMを生成するマクロがあります。 PROC SQL select intoを使用します。
%macro CREATE_DIM_VAR(tbl, var); %macro _; %mend _;
%syslput tbl = &tbl./remote=gidwsas;
%syslput var = &var./remote=gidwsas;
rsubmit;
PROC SQL NOPRINT;
*Create SELECT statement for columns we want;
SELECT ALL_DIM INTO: TBL_DIM SEPARATED BY ', '
FROM ALLDIM_LIST
WHERE TBL = "&TBL." AND VAR = "&VAR."
;
QUIT;
endrsubmit;
%mend;
%CREATE_DIM_VAR(A、GENDER);
私は次のようにします。
rsubmit;
%put &TBL_DIM.;
endrsubmit;
それは正常に動作します。
しかし、今、私は別のマクロ内で呼び出すしようとすると:
%macro Execute(); %macro _; %mend _;
rsubmit;
%do n = 1 %to 10;
%let THIS_VAR = %scan(&TBL_DIM., &n.));
%put &THIS_VAR.;
%end;
endrsubmit;
%mend;
%は(実行)。
エラーが発生します。 警告:見た目のシンボリックリファレンスTBL_DIMは解決されません。
他のマクロにTBL_DIMを渡すにはどうすればよいですか?
EDIT: 私はそれが動作するリモートサーバーから完全に実行するために)(実行%を変更する - なぜ私は私の最後のコメントを追加しているが、私はまだ...概念的
rsubmit;
%macro Execute(); %macro _; %mend _;
%do n = 1 %to 10;
%let THIS_VAR = %scan(&TBL_DIM., &n.));
%put &THIS_VAR.;
%end;
%mend;
endrsubmit;
rsubmit;
%Execute();
endrsubmit;
最初のマクロはTBL_DIMを作成するので、VAR_DIMが定義されていないことは驚くことではありません。これがちょうどタイプミスであると仮定すると、マクロバールのグローバルスコープとローカルスコープの問題が原因と考えられます。 '%global tbl_dim;'を追加してみてください。両方のマクロの始めに... –
@ChrisLongはい、それは誤植でした! – Wolfspirit
@ChrisLong%GLOBALを追加するとマクロ変数が解決されるようですが、それらは空白として表示されます – Wolfspirit