【问题标题】:Parallel Processing in SASSAS 中的并行处理
【发布时间】:2018-12-07 20:03:29
【问题描述】:

哦,明智的 StackOverflow 用户。我对 SAS 9.4 中的并行处理有疑问:

我知道 SAS 通常以顺序或线性方式执行过程,但是,我也知道 SAS 也能够并行执行过程。我的问题是:你如何设置这个?我检查了几个博客,但都没有取得任何程度的成功。我的代码的总体布局是这样的:

MACRO VARIABLES;
%syslput _all_;
RSubmit;
Data step to slightly modify variables;
Run;
EndRSubmit;

PROC SQL 1;
Connect to server statement;
SQL code;
QUIT;
...
PROC SQL n;
Connect to server statement;
SQL code;
QUIT;

理想情况下,我希望并行执行 8 段 PROC SQL 代码,而不是以线性方式执行。任何帮助或建议将不胜感激。

谢谢!

【问题讨论】:

    标签: multithreading parallel-processing sas sas-macro proc-sql


    【解决方案1】:

    不完全是线程,但如果您能够使用 RSUBMIT,则可以选择发送代码,然后您可以再次控制您的计算机。您仍然需要等待输出,但它不会挂起或阻止您的计算机。

    RSUBMIT CONNECTWAIT=NO;
    

    不确定在 RSUBMIT 之后是否需要斜杠,但文档中没有显示任何内容。

    https://documentation.sas.com/?docsetId=connref&docsetTarget=p1eyablk3vvdlkn1h5euyczvt585.htm&docsetVersion=9.4&locale=en

    【讨论】:

    • 你不需要/ :)
    【解决方案2】:

    如果您的代码片段是独立的,您可以提交它们并在单独的 SAS 会话中并行运行。即使这些会话被称为“远程”,您甚至可以在单台机器上运行它们。这是一个“远程”会话的示例:

    /* Prosess 1 */
    signon task1;
    rsubmit task1 wait=no;
    
       PROC SQL n;
       Connect to server statement;
       SQL code;
       QUIT;
    
    endrsubmit;
    

    您可以有多个这样的 RSUBMIT/ENDRSUBMIT 会话。

    最后你需要使用

    同步你的结果
    waitfor _all_;
    signoff _all_;
    

    您可以在Running SAS programs in parallel using SAS/CONNECT®博客文章中找到有关此方法的详细说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2014-04-28
      • 1970-01-01
      相关资源
      最近更新 更多