【问题标题】:Run a Sas macro in parallel并行运行 Sas 宏
【发布时间】:2019-12-24 07:56:21
【问题描述】:

所以我有一个类似这样的宏,目的是计算信息值:

%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 脚本,但变量的数量是未知的,问题就在这里。任何微小的帮助将不胜感激。非常感谢。

【问题讨论】:

  • 那么shell脚本的问题在哪里呢?给一个参数使用前半部分,另一个使用后半部分。在 sas 中拆分列表或除奇偶数。
  • 请提供您尝试并行化的代码的minimal, verifiable and complete example。您当前的示例太有限,任何人都无法提供有用的建议。
  • 要明确的是,宏生成的源代码很可能需要很长时间......有点像花 4 个小时来计划一个 8 天的旅行并说计划需要很长时间时间。
  • 鉴于您提供的代码,我们不知道您如何使用该宏变量,也无法提供任何加快速度的方法。可能有也可能没有,您需要提供更多详细信息。

标签: parallel-processing sas logistic-regression sas-macro


【解决方案1】:

在 SAS 中管理并行执行相当不方便,并且涉及到 SAS MP Connect / SAS Grid (signon/rsubmit)。

shell中的并行执行是much easier,例如:

echo "param1 param2 param3" | tr ' ' '\n' | xargs -i{} -P 2 ./run-sas.sh {}

-P 2 指定并行进程的数量。我在a recent answer 中介绍了将参数传递给子 SAS 会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多