如何强制SAS等待命令完全执行?

时间:2019-05-07 18:53:12

标签: python python-3.x sas wait

启动SAS会话时出现了一个问题,随后等待Python脚本完成。我正在使用Python进行词袋分析,并添加了一些情感分析以获取味道,脚本执行得很好,但是SAS在启动它后一直坚持下去。这就提出了一个问题,因为SAS程序的其余部分要求Python脚本的结果才能正确运行。

我尝试在SAS中使用waitfor all 命令,但这似乎不适用于该特定问题。

这是我在SAS中执行的代码:

%pScript_loc=path\pythonTester.py; /* LOCATION OF THE PROGRAM */
filename temp pipe "otherPath\python.exe &pScript."; /* LOCATION OF PYTHON EXECUTABLE */
data _null_;
infile temp;
input;
put _infile_;
run;

waitfor _all_;

这应该确保SAS程序可以启动Python程序,但似乎并不能有效地使SAS等待Python完成其工作。

2 个答案:

答案 0 :(得分:2)

尝试使用x命令而不是data _null_步骤。 xsync在SAS中默认为打开状态,这意味着在Python脚本完成之前,操作系统不会将控制权返回给SAS。

%let %pScript_loc=path\pythonTester.py;

x "otherPath\python.exe &pScript.";

您还可以选择使用saspy软件包并从那里进行所有操作,而完全跳过SAS编辑器。

答案 1 :(得分:0)

waitfor专用于systask 文件名有点不同

filename x pipe 'dir';
data _NULL_;
  infile x DLM='$';
  length str $80;
  input str;
  put str;
run;
data _NULL_;
  infile x DLM='$';
  length str $80;
  input str;
  put str;
run;

每次数据访问文件时,都会打开管道并读取直到关闭。这意味着您可以打开两次相同的时间,而无需等待程序结束。