符号参考 - DO LOOP中的SCAN功能

时间:2017-06-13 08:34:19

标签: loops macros sas

我是处理宏变量的相对新手,似乎已经卡住了。

我有一个宏打开一个表并生成一个宏变量& 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;

1 个答案:

答案 0 :(得分:1)

我添加了我的上一条评论作为答案,因为下面的参考文献给出了OP观察到的行为的明确原因。

计算服务与宏处理之间的互动

http://support.sas.com/documentation/cdl/en/connref/61908/HTML/default/viewer.htm#a001584568.htm

在您的非工作情况下,本地宏处理器正在处理rsubmit / endrsubmit块中的代码,然后将处理后的块发送到远程服务器。但是,当您在rsubmit / endrsubmit块中声明一个宏时,将提交并远程定义整个宏。