在并行处理时共享变量

时间:2019-08-03 12:56:27

标签: sas

我设置了一个进程,该进程并行处理8个程序以提取大量数据。但是,我必须继续维护每个变量中的所有变量(这是每月一次)。

有没有一种方法可以使用所有变量创建一个主程序,并在运行时在程序之间共享它们?我了解每个程序都使用自己的SAS实例,所以我认为不可以。

1 个答案:

答案 0 :(得分:2)

您正确地注意到,不同的SAS程序不会自动共享变量,但是您可以显式地传递它们:

  • 通过将它们传递给环境变量(当您没有几个参数(例如报告日期)时,这特别有用)。

    • 在这种情况下,启动程序可以是一个简单的shell脚本,例如在* nix中:

      export REPORT_DATE=20190701
      sas -sysin program_a.sas
      
    • 或者,从SAS,您可以使用systask command来执行子SAS会话
    • 从子会话中,您可以通过%sysget检索参数值:

      %let REPORT_DATE = %sysget(REPORT_DATE);
      
  • 根据注释中的建议,将参数存储在共享位置(例如,在数据集中)。

    • 在父会话中:

      data sharedlib.params;
          REPORT_DATE = "&REPORT_DATE";
      run;
      
    • 在子会话中:

      proc sql noprint;
          select REPORT_DATE /*format XXX. as necessary*/ into :REPORT_DATE
          from sharedlib.params;
      quit;
      
  • 如果使用SAS / CONNECT管理子会话(即signonrsubmit),则可以通过%sysrput

相关问题