我是处理宏变量的相对新手,似乎已经卡住了。
我有一个宏打开一个表并生成一个宏变量& 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传递给另一个宏?
编辑: 当我修改%Execute()以完全从远程服务器运行时它可以工作 - 但我仍然不明白为什么......
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;
答案 0 :(得分:1)
我添加了我的上一条评论作为答案,因为下面的参考文献给出了OP观察到的行为的明确原因。
计算服务与宏处理之间的互动
http://support.sas.com/documentation/cdl/en/connref/61908/HTML/default/viewer.htm#a001584568.htm
在您的非工作情况下,本地宏处理器正在处理rsubmit / endrsubmit块中的代码,然后将处理后的块发送到远程服务器。但是,当您在rsubmit / endrsubmit块中声明一个宏时,将提交并远程定义整个宏。