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