【发布时间】:2016-02-26 17:30:38
【问题描述】:
在执行单个 .sas 脚本时,我在“建立与本地服务器的连接”和库加载上浪费了大约 30 秒,然后再执行 3 秒的 sas 脚本本身。
是否可以针对同一个已建立的连接以编程方式执行多个 sas 脚本(我通过 Windows shell 调用它们)?
像一个保持活动的 TCP 通道?
【问题讨论】:
标签: batch-file sas
在执行单个 .sas 脚本时,我在“建立与本地服务器的连接”和库加载上浪费了大约 30 秒,然后再执行 3 秒的 sas 脚本本身。
是否可以针对同一个已建立的连接以编程方式执行多个 sas 脚本(我通过 Windows shell 调用它们)?
像一个保持活动的 TCP 通道?
【问题讨论】:
标签: batch-file sas
你好 access_granted,
你在正确的轨道上。您在对 RawFocus 的 cmets 中说,“它像套接字服务器一样运行”,在您的问题中说“保持 TCP 连接保持活跃”。您实际上可以通过一些巧妙的编程在 SAS 中进行归档。
SAS Socket 服务器: 这是一个宏语言的 SAS 服务器,永远循环到 响应请求。在等待的过程中值得注意 下一个请求,服务器处于休眠状态,消耗非常大 其主机上的资源很少。
/* Port as input parameter */
%let portno= &sysparm;
%* let portno= 001;
%do %while ( 1 );
filename in_msg SOCKET " :&portno"
SERVER;
filename temp_pgm "%sysfunc(pathname(work))/a-ready.sas" ;
data _null_;
infile in_msg;
file temp_pgm;
input ;
put _infile_;
run;
filename in_msg;
/* Before execution, server can choose to
parse it first */
%inc temp_pgm;
run;
filename temp_pgm;
%end;
为该客户端提供了 SAS 服务器的 IP 地址、要调用的端口号以及服务器要执行的程序文件。它能够向已知可用的 SAS 服务器发送一个请求。另请注意,客户端负责指导服务器在哪个端口上发回结果(如果需要)。
%let host= IP-address-for-server-machine;
%let portno= 001;
filename to_servr SOCKET “ &host:&portno” ;
filename input ‘SAS-program-to-be-run-onserver.sas’;
/* Simple scheme to come up with a different port
number to accept response from the server */
%let ret_port= %eval( &portno + 1 );
data _null_;
file to_servr;
infile input end= EOF;
if _n_ = 1 then do;
/* Required info for the server to return results
back to this client */
put ‘%let ret_port= ’ “ &ret_port;” ;
put ‘%let client= IP-address-for-clientmachine;’;
end;
input ;
put _infile_;
run;
filename input;
filename to_servr;
/* Receiving socket for the results */
filename back_rst SOCKET “ :&ret_port” SERVER;
data null_;
infile back_rst;
file print;
input ;
put _infile_;
run;
filename back_rst;
来源:http://www2.sas.com/proceedings/sugi24/Coders/p083-24.pdf
顺便说一句,如果可能,您还可以考虑重新配置 SAS 服务器。 30 秒开始一个会话有点长,尤其是对于批处理会话。
【讨论】:
如果您对它们在同一个 sas 会话 中连续运行感到满意,您可以创建一个 sas 脚本来执行其他脚本..
options source2; /* puts the contents of the sas files below in the log */
%inc "C:\MyLoc\script1.sas";
%inc "C:\MyLoc\script2.sas";
%inc "C:\MyLoc\script3.sas";
等等
这种方法的缺点是您的程序必须适当地处理之前运行的任何剩余工作表/宏/宏变量等(它们不会有干净的会话)。
【讨论】: