Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 并行处理时共享变量_Sas - Fatal编程技术网

Sas 并行处理时共享变量

Sas 并行处理时共享变量,sas,Sas,我设置了一个进程,并行处理8个程序以获取大量数据。但是,我必须维护每个变量中的所有变量(这是每月一次的事情) 有没有办法创建一个包含所有变量的主程序,并在运行时在程序之间共享这些变量?我知道每个程序都使用自己的SAS实例,所以我认为不是。正如您正确注意到的,不同的SAS程序不会自动共享变量,但您可以显式地传递它们: 通过将它们传递给环境变量(当您只有很少的参数时,如报告日期,这尤其有用) 在这种情况下,启动器程序可以是一个简单的shell脚本,例如在*nix中: export REPORT_

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


有没有办法创建一个包含所有变量的主程序,并在运行时在程序之间共享这些变量?我知道每个程序都使用自己的SAS实例,所以我认为不是。正如您正确注意到的,不同的SAS程序不会自动共享变量,但您可以显式地传递它们:

  • 通过将它们传递给环境变量(当您只有很少的参数时,如报告日期,这尤其有用)

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

      export REPORT_DATE=20190701
      sas -sysin program_a.sas
      
    • 或者,从SAS,您可以使用
      systask命令
      执行子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管理子会话(即
    signon
    rsubmit
    ),则可以通过
    %sysrput


程序可以共享一个库。hmmm…因此我可以创建一个永久库(MYLIB)并分配一组%let变量(月份等)。在我的其他程序中如何调用它们&MYLIB.MONTH?描述8个程序中的每个变量,以及您想要的最终结果LET变量是宏变量,可以更多地被视为控制流、代码生成和数据过滤值的参数。你想让这8个程序中的每一个都使用相同的宏变量值吗?我在一家数据公司工作,我正在提取数百万条记录。我必须按产品类型将拉入分成8个不同的程序,因此我确实需要所有8个程序使用相同的%Let MONTH变量。我很想这样做一次,但如果我不能,这比破坏交易更烦人。将参数值(如月份)存储在共享库中的数据集中。然后,每个分支都可以将参数数据集中的值转换为宏变量(如果这有助于代码)。