【问题标题】:how to call multiple macros using sas autos如何使用 sas autos 调用多个宏
【发布时间】:2016-12-12 22:05:53
【问题描述】:

您好,我有用于特定任务的通用宏,我如何自动调用宏,并编译并执行相应的宏。我尝试在日志中运行定义的宏,然后调用特定的宏调用,但速度很慢,但是当我运行所需的宏调用时,任何人都可以提供另一种自动执行宏的解决方案...提前致谢。

下面是我的宏的位置--> F:\SAS\BI\macro

以下是我在该位置的示例宏-->

%macro rand(dsn1=,dsn2=,odsn=);
Data &dsn1;
    do i=1 to 27;
        t=rand("uniform")*40;
    do j=1 to 10;
        w=rand("uniform");
        bj=0.2;
        sigma=0;
        sigma+(t*w)+bj;
        y=1/(1+exp(-sigma));    
        output;
    end;
    end;
run;

Data &dsn2;
    set &dsn1(keep=y);
    do j=1 to 10;
        *y=y;
    do k=1 to 5;
        w2=rand("uniform");
        bk=0.3;
        sigma2=0;
        sigma2+(y*w2)+bk;
        z=1/(1+exp(-sigma2));   
        output;
    end;
    end;
run;

data &odsn;
    set &dsn1 &dsn2;
run;
%mend;
%rand(dsn1=numerics.itoh,dsn2=numerics.htoo,odsn=numerics.itoo);

【问题讨论】:

  • 你能解释一下什么是太慢了吗?如果宏运行缓慢,我不确定您能做些什么,除了修改宏以使其更高效。

标签: sas sas-macro


【解决方案1】:

如果您的目标是避免每次使用保存在文件夹中的宏时都重新编译它们,您应该可以通过设置option sasautos="F:\SAS\BI\macro"; 来实现此目的。如果您要使用的每个宏都保存在与宏同名的单独 .sas 文件中,那么应该可以工作。

如果您使用的是合适的现代 SAS 版本,请改用 RawFocus 的建议,因为这会保留任何现有的 sasautos 设置。

options insert=(sasautos="F:\SAS\BI\macro");

如果您的新文件夹和任何现有的sasautos 文件夹中有同名的宏,这仍然可能会导致宏行为发生一些变化。

【讨论】:

  • 该方法将覆盖 sasautos 的当前值。请改用以下内容:options insert=(sasautos="F:\SAS\BI\macro");
  • sasautos 列表中插入的新路径在哪里?
  • 在顶部/开头(在优先级树中将首先调用宏)
【解决方案2】:

如果您想使用自动调用宏,那么文件应该只包含宏定义,而不是您发布的代码最后一行的宏调用。文件名也应该是带有扩展名.sas 的宏名。所以在这种情况下,文件名应该是rand.sas。如果您在 unix 上运行 SAS,则文件名必须全部小写。

您只需将包含宏定义的文件的存储路径添加到SASAUTOS 选项的设置中。然后,您可以在 SAS 程序中的任何位置调用宏。

 options sasautos=('F:\SAS\BI\macro\',sasautos);
 %rand(dsn1=numerics.itoh,dsn2=numerics.htoo,odsn=numerics.itoo);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多