Sas 并行处理时共享变量
我设置了一个进程,并行处理8个程序以获取大量数据。但是,我必须维护每个变量中的所有变量(这是每月一次的事情)Sas 并行处理时共享变量,sas,Sas,我设置了一个进程,并行处理8个程序以获取大量数据。但是,我必须维护每个变量中的所有变量(这是每月一次的事情) 有没有办法创建一个包含所有变量的主程序,并在运行时在程序之间共享这些变量?我知道每个程序都使用自己的SAS实例,所以我认为不是。正如您正确注意到的,不同的SAS程序不会自动共享变量,但您可以显式地传递它们: 通过将它们传递给环境变量(当您只有很少的参数时,如报告日期,这尤其有用) 在这种情况下,启动器程序可以是一个简单的shell脚本,例如在*nix中: export REPORT_
有没有办法创建一个包含所有变量的主程序,并在运行时在程序之间共享这些变量?我知道每个程序都使用自己的SAS实例,所以我认为不是。正如您正确注意到的,不同的SAS程序不会自动共享变量,但您可以显式地传递它们:
- 通过将它们传递给环境变量(当您只有很少的参数时,如报告日期,这尤其有用)
- 在这种情况下,启动器程序可以是一个简单的shell脚本,例如在*nix中:
export REPORT_DATE=20190701 sas -sysin program_a.sas
- 或者,从SAS,您可以使用
执行子SAS会话systask命令
- 从子会话中,您可以通过
检索参数值:%sysget
%let REPORT_DATE = %sysget(REPORT_DATE);
- 在这种情况下,启动器程序可以是一个简单的shell脚本,例如在*nix中:
- 如评论中所建议的,通过将参数存储在共享位置(例如数据集中)来实现
- 在父会话中:
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