如何使用sas autos调用多个宏

时间:2016-12-12 22:05:53

标签: sas sas-macro

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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

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