SAS: как исправить поведение WAITFOR при обработке параллельных сессий? - PullRequest
0 голосов
/ 10 мая 2019

Я запускаю 3 параллельных сеанса в SAS и должен убедиться, что все они завершены, прежде чем соединять их вместе.Я использую команду 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, все идет хорошо.

Я уже попробовал 2 решения, которые предлагает sas.com, когда вы получаете «Примечание: оператор отображения в настоящее время выполняется ..."сообщение, но это не сработало.2 решения: 1. Отключение «Вывести на передний план при отображении новых данных» для окна вывода (которое уже было не помечено), 2. Переименовать локальные файлы в profile.s.s7bcat и profile2.sas7bcat

Iожидайте, что код будет работать ровно от начала до конца, ожидая, когда есть оператор waitfor, но затем возобновляя работу, когда все сеансы завершаются с их задачами

Как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...