Macros %syslput在rsubmit SAS中不工作

Macros %syslput在rsubmit SAS中不工作,macros,sas,remote-process,Macros,Sas,Remote Process,----------------------实现rsubmit的使用&访问传递给它的值---------------------------- 我正在尝试编写一个代码来创建不同的远程会话,它还将在宏的帮助下将数据集值传递给特定的rsubmit块。我们知道,简单的宏变量值不能发送到rsubmit语句,因为rsubmit创建了新的会话。这就是我使用%syslput语句的原因。但它不起作用,请告诉我如何使用%syslput将数据集值传递给rsubmit语句 options sascmd='!s

----------------------实现rsubmit的使用&访问传递给它的值----------------------------

我正在尝试编写一个代码来创建不同的远程会话,它还将在宏的帮助下将数据集值传递给特定的rsubmit块。我们知道,简单的宏变量值不能发送到rsubmit语句,因为rsubmit创建了新的会话。这就是我使用%syslput语句的原因。但它不起作用,请告诉我如何使用%syslput将数据集值传递给rsubmit语句

    options sascmd='!sascmd -nosyntaxcheck'  autosignon=yes sysrputsync mprint symbolgen;
    data data;
    input num@@;
    datalines;
    1 2 3
    ;
    run;

    %macro startTask(n);
        %syslput number=&n;
        rsubmit Task&n wait=no;
            %put Output from Task&number;
            %put Value of Number:=&number;
        endrsubmit;
    %mend;

    %macro finishTask;
        waitfor _ALL_ Task1 Task2 Task3;
        signoff Task1;
        signoff Task2;
        signoff Task3;
    %mend;

    data _NULL_;
    set data end=last;
    call execute('%nrstr(%startTask('||strip(num)||'))');
    run;

   %finishTask
日志:------------>

更新的宏代码:

%macro startTask(n); 
signon Task&n; 
%syslput number=&n /remote=Task&n;
rsubmit Task&n wait=no; 
%put Output from Task&number; 
%put Value of Number:=&number; 
endrsubmit; 
%mend;

当您使用
%syslput
语句时,您需要指定希望它以哪个远程会话为目标,例如

%syslput remote_var = value /remote=remote_session_name;
如果不指定会话,我认为SAS会尝试使用上次远程提交代码的会话。但是,由于您使用的是
自动签名
,因此在登录到rsubmit生成的远程会话之前,您就尝试执行
%syslput

在使用%syslput同步宏变量之前,请先尝试登录会话,看看这是否有帮助。例如

%let number = 1;
option autosignon = no;
signon task1;
%syslput number_remote = &number /remote = task1;

这将在会话
task1
中创建一个名为
number\u remote
的宏变量,其值为
1

,如果要使用远程宏变量,您的宏变量需要位于rsubmit中的宏内。如果将所有内容都封装在宏中,则会更容易。 试试这个:

%macro startTask(n); 
signon Task&n; 
%syslput number=&n /remote=Task&n;
rsubmit Task&n wait=no; 
%macro test();
%put Output from Task&number; 
%put Value of Number:=&number; 
%mend test;
%test;
endrsubmit; 
%mend;

%syslput number=1/远程=Task1;%syslput number=1/remote=Task2;%syslput number=1/remote=Task3;这是用于指定sessionID的正确语法吗?如果是,我应该在哪里添加这些语句?请告诉我应该在上面的程序中将变量声明代码放在哪里?根据您的建议,这是正确的代码吗。%syslput number=1/remote=Task1;我已经添加了一个示例。代码已更正-我有一些语法是反向的。
%macro startTask(n); 
signon Task&n; 
%syslput number=&n /remote=Task&n;
rsubmit Task&n wait=no; 
%macro test();
%put Output from Task&number; 
%put Value of Number:=&number; 
%mend test;
%test;
endrsubmit; 
%mend;