SAS并行运行两个数据步骤
这是我的SAS代码,用于并行运行2个数据步骤。 我收到此错误:*找不到TCP主机“TASK1” 当我不并行运行这段代码时,它可以工作。但我需要它并行运行,因为实际的数据集是数亿条记录SAS并行运行两个数据步骤,sas,Sas,这是我的SAS代码,用于并行运行2个数据步骤。 我收到此错误:*找不到TCP主机“TASK1” 当我不并行运行这段代码时,它可以工作。但我需要它并行运行,因为实际的数据集是数亿条记录 %include 'C:details.txt'; %let myserv=10.xxx.xx.xxx 4052; filename rlink 'C:\Users\id\Desktop\TCPUNIX_moki.txt'; options comamid=tcp remote=M
%include 'C:details.txt';
%let myserv=10.xxx.xx.xxx 4052;
filename rlink 'C:\Users\id\Desktop\TCPUNIX_moki.txt';
options comamid=tcp remote=MOKI;
signon LOKI;
/*send passwords to remote server for RSUBMIT*;
%SYSLPUT seid = &seid;
%SYSLPUT passcdw = &passcdw;
/*Establish remote Libaries, including CDW databases as LIB*;
RSUBMIT;
OPTIONS NOCENTER;
/*CDW DATABASE LIBNAME*/
LIBNAME CDW odbc dsn=cdwsas uid=&seid pwd=&passcdw schema=cdwsa;
ENDRSUBMIT;
*Add LIBNAMES to local GUI;
LIBNAME rCDW slibref = CDW server = MOKI;
LIBNAME rwork slibref = work server = MOKI; * your remote work;
options autosignon=yes sascmd="sas";
rsubmit task1 wait=no sysrputsync=yes;
/*create TASK1 SAS session to get data for 2012 */
data rwork.Mtrdb0;
set rcdw.MTRDB (OBS=10);
where TAX_YR = 2012 ;
run;
/* get TASK1's WORK library path in parent session */
%sysrput pathtask1=%sysfunc(pathname(work));
endrsubmit;
create TASK2 SAS session to get data for 2013 */
rsubmit task2 wait=no sysrputsync=yes;
data rwork.MtrdbF0_1;
set rcdw.MTRDB_(OBS=10);
where TAX_YR = 2013 ;
run;
%sysrput pathtask2=%sysfunc(pathname(work));
endrsubmit;
/*wait until both datasteps have finished */
waitfor _all_ task1 task2;
signoff task1;
signoff task2;
考虑这种并行处理方法: 编写SAS命令以将SAS调用到cmd文件
data _null_ ;
%do i = 1 %to 5;
file workarea(job_&i..cmd) ;
put " ""&sasroot&separator.sas"" " @ ;
put "-sysin ""c:\temp\job_&i..sas"" " @ ;
put %sysfunc(compbl("&generated_programs_options ")) @ ;
put "&sasexe_options " @ ;
put "-log ""c:\temp\logs\job_&i._&Process_Date_Formatted..log"" ";
%end ;
run;
然后并行执行它们:
%do i = 1 %to 5 ;
systask kill sas&i ;
systask command "c:\temp\Job_&i..cmd" taskname=sas&i;
%end ;
waitfor _all_
这是为我工作的命令,并行运行了两个作业
%let log= 'C:\Users\XXXXb\';
%let loc1= 'C:\Users\XXXXb\Documents\My SAS Files\9.4\q2012.sas';
%let loc2= 'C:\Users\XXXXb\Documents\My SAS Files\9.4\q2013.sas';
systask command "sas &loc1 -log &log.log "
taskname=sas1
status =stat_sas1;
systask command "sas &loc2 -log &log.log "
taskname=sas2
status =stat_sas2;
waitfor _all_ sas1 sas2;
当你连接到LOKI时,为什么要提交TASK1?我想你必须给它两个线程?这是我文章中的第一段代码。它使用put语句将这些行写入cmd文件。如果您不在Windows上,则需要翻译SAS代码以适应unix。基本过程是1)让SAS数据步骤(上面的data null)将对SAS的调用写入cmd文件。第2步,运行那些cmd文件。cmd文件将指向SAS代码并在命令行执行SAS。我的SAS在windows上。当我运行上面的代码时,我得到一个错误消息,宏无法在开放代码中运行。你能给我完整的代码吗?对不起,你需要知道SAS才能使用这些东西。将数据步骤包装到宏:%macro RunParallel()。。。上面的代码…%平行运行;%RunParallel();在代码片段变得有意义之前,您需要了解SAS是如何工作的,包括数据步骤和宏。我们在这里帮助您找到正确的方向,但我无法提供完整的代码示例:仅提供核心代码片段和说明。我还必须将其保存到永久库用户,因为生成的表在工作库中被删除。