我是一個相對的新手來處理宏變量,似乎已經卡住了。符號參考 - 掃描功能在DO LOOP
我有一個宏可以打開一個表並生成一個宏變量& 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傳遞給其他宏?
編輯: 當我修改%執行()從它的工作原理遠程服務器運行全部 - 但我還是不概念性理解爲什麼...
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