SAS并行运行两个数据步骤

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

这是我的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=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是如何工作的,包括数据步骤和宏。我们在这里帮助您找到正确的方向,但我无法提供完整的代码示例:仅提供核心代码片段和说明。我还必须将其保存到永久库用户,因为生成的表在工作库中被删除。