如何使用sas autos调用多个宏

how to call multiple macros using sas autos

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

下面是我的宏的位置--> 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);

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

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

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

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

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

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

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