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