运行 一个并行的 Sas 宏
Run a Sas macro in parallel
所以我有一个类似这样的宏,用objective计算信息值:
%macro iv_calc(x,event,varlist);
data main_table;
set x(keep=event varlist.);
run;
/****Steps to compute IV ****/
%mend;
X 是数据集的名称,event
是因变量名称,varlist
是宏变量格式中所有自变量的名称。
varlist
中的变量数量未知,可能在 100 到 2000+ 之间变化。因此,宏需要很长时间才能 运行。我是新手,所以我的要求是了解是否有办法将 varlist
拆分为 2,并且 运行 并行使用相同的宏(因为需要事件来计算信息值), 以减少 运行 时间。我的第一个想法是求助于 shell 脚本,但是变量的数量是未知的,这就是问题所在。任何微小的帮助将不胜感激。非常感谢。
在 SAS 中管理并行执行相当不方便,涉及 SAS MP Connect / SAS Grid(signon
/rsubmit
)。
shell中的并行执行是,例如:
echo "param1 param2 param3" | tr ' ' '\n' | xargs -i{} -P 2 ./run-sas.sh {}
-P 2
指定并行进程数。我在 .
中介绍了将参数传递给子 SAS 会话
所以我有一个类似这样的宏,用objective计算信息值:
%macro iv_calc(x,event,varlist);
data main_table;
set x(keep=event varlist.);
run;
/****Steps to compute IV ****/
%mend;
X 是数据集的名称,event
是因变量名称,varlist
是宏变量格式中所有自变量的名称。
varlist
中的变量数量未知,可能在 100 到 2000+ 之间变化。因此,宏需要很长时间才能 运行。我是新手,所以我的要求是了解是否有办法将 varlist
拆分为 2,并且 运行 并行使用相同的宏(因为需要事件来计算信息值), 以减少 运行 时间。我的第一个想法是求助于 shell 脚本,但是变量的数量是未知的,这就是问题所在。任何微小的帮助将不胜感激。非常感谢。
在 SAS 中管理并行执行相当不方便,涉及 SAS MP Connect / SAS Grid(signon
/rsubmit
)。
shell中的并行执行是
echo "param1 param2 param3" | tr ' ' '\n' | xargs -i{} -P 2 ./run-sas.sh {}
-P 2
指定并行进程数。我在