Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 符号参考-DO循环内的扫描功能_Loops_Macros_Sas - Fatal编程技术网

Loops 符号参考-DO循环内的扫描功能

Loops 符号参考-DO循环内的扫描功能,loops,macros,sas,Loops,Macros,Sas,我是处理宏变量的相对新手,似乎已经陷入困境 我有一个宏,它打开一个表并生成一个宏变量&TBL_DIM。使用procsqlselectinto %macro CREATE_DIM_VAR(tbl, var); %macro _; %mend _; %syslput tbl = &tbl. / remote=gidwsas; %syslput var = &var. / remote=gidwsas; rsubmit; PROC SQL NOPRINT;

我是处理宏变量的相对新手,似乎已经陷入困境

我有一个宏,它打开一个表并生成一个宏变量&TBL_DIM。使用procsqlselectinto

%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;
%创建变量(A,性别)

当我执行以下操作时:

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_尺寸未解析

如何将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;

我添加我最后的评论作为回答,因为下面的参考给出了OP观察行为的确切原因

计算服务和宏处理之间的交互


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

第一个宏创建TBL_DIM,因此没有定义VAR_DIM也就不足为奇了。假设这只是一个输入错误,那么问题可能是由于宏变量的全局范围和局部范围。尝试添加“%global tbl\u dim;”在两个宏的开头…@ChrisLong是的,这是一个输入错误对不起@ChrisLong添加%GLOBAL似乎解决了宏变量问题,但它们显示为空白sre:在您的编辑中,您有一个本地SAS会话和一个远程SAS会话,它们是完全独立的-在一个会话中创建的宏变量在另一个会话中不存在。如果在本地会话中声明并运行Execute宏,则该宏无权访问远程会话中存在的TBL_DIM宏变量。@ChrisLong这与%Execute宏引用&TBL_DIM无关。在宏内部的rsubmit会话中?