SAS:如何解决并行会话处理中的WAITFOR行为?

时间:2019-05-10 07:53:45

标签: parallel-processing sas

我正在SAS中运行3个并行会话,需要确保它们都已全部运行,然后再将它们放在一起。我使用WAITFOR命令来执行此操作,但行为与预期不符。

我正在使用基本SAS 9.3

这是我用来登录会话的代码:

%macro open_sessions(n);
%let t=2;
%let j = %eval(&n. + 1); 

%do %while (&t. <=&j.);
%let r&t.=%str(xxx) xxx; 
options remote=r&t. comamid=tcp debug='connect=xxx'; 
options metaserver="xxx" 
metaport=xxx
metauser="xxx" 
metapass="&PSW." 
metaprotocol="bridge"; 
signon authdomain="xxx" wait=no Cmacvar=d&t.;
libname work_r&t. server=r&t. slibref=work;
options nolabel; 
%let t = %eval(&t. + 1); 
RDISPLAY r&t; 
%end;

%mend open_sessions;

然后我执行几个

rsubmit r2;
...
endrsubmit;
rsubmit r3;
...
endrsubmit;
rsubmit r4;
...
endrsubmit;

最后:

WAITFOR _ALL_ r2 r3 r4; (after there is other code)

在这一点上,2种不同的情况在不同的运行中发生 1. SAS关闭,即关闭所有窗口,包括SAS本身,或 2. SAS无休止地等待,好像某个会话仍在运行,但实际上所有会话都已完成运行(即cmacvar变量都为= 0,并且已生成所有输出)。如果我尝试向会话提交其他代码,则会收到以下消息:“注意:当前正在执行一条显示语句。所有随后提交的语句将在其完成之前开始执行”。

如果我分别执行waitfor之前的代码,然后执行waitfor之后的代码,一切都会很好。

我已经尝试了sas.com提出的两种解决方案,当您收到“注意:一条显示语句正在执行...”消息时,但这没有用。这两种解决方案是:1.取消标记输出窗口的“显示新数据时显示在最前面”(已取消标记),2.重命名本地文件profile.sas7bcat和profile2.sas7bcat

我希望代码在有waitfor语句的情况下从头到尾平稳运行,然后在所有会话完成其任务后恢复运行

我该如何解决?

0 个答案:

没有答案