假设我通过以下方式存储了宏:
options mstored sasmstore=FOO;
%macro hello_world() / STORE SOURCE DES='hello world';
%put hello world;
%mend;
现在我想将此宏从库FOO
复制到库BAR
,我想要类似的东西(这显然行不通):
%copy hello_world /source LIB = BAR;
这等效于:
options mstored sasmstore=BAR;
%macro hello_world() / STORE SOURCE DES='hello world';
%put hello world;
%mend;
目标是方便地将宏从开发库复制到生产库。我该怎么办?
答案 0 :(得分:2)
Proc CATALOG
用于将条目从一个成员复制到另一成员
%macro One;
%put ONE;
%mend;
proc catalog catalog=work.sasmacr;
copy out=work.holdmacr;
select one / et=macro;
run;
复制条目的另一种方法是使用LIBNAME
自动提供的串联功能。
从SAS帮助中
示例3:串联SAS目录
此示例通过指定 每个文件的物理文件名,并将libref ALLMINE分配给 串联库:
libname allmine ('file-1' 'file-2' 'file-3');
如果每个库包含一个名为MYCAT的SAS目录,则使用 ALLMINE.MYCAT作为libref.catref提供对目录条目的访问 它们存储在名为MYCAT的所有三个目录中。逻辑上 将名称不同的SAS目录连接起来,请参阅CATNAME 声明。
如果相同名称的目录包含相同的命名条目,则使用最早的库中的条目。
这在单元测试期间确实非常方便,因为在证明更新无损之前不必更改原始文档。您有集成单元测试吗? ;-)
答案 1 :(得分:1)
如果您只想将宏移至生产环境,则PROC CATALOG
是正确的处理方法。
*define foo;
libname foo "c:\temp";
*create the stored macro;
options mstored sasmstore=FOO;
%macro hello_world() / STORE SOURCE DES='hello world';
%put hello world;
%mend;
*define bar;
libname bar "c:\otherdir";
*proc catalog to copy it over;
PROC Catalog catalog = foo.sasmacr;
copy out=bar.sasmacr;
run;
***reset SAS session before continuing to clear libname foo***;
*now redirect SAS to BAR;
libname bar "c:\otherdir";
options mstored sasmstore=bar;
*and run hello_World- see it works!;
%hello_world;
现在,我可能不会这样做-我将使用git来存储和部署源文件-但是,如果您更喜欢存储的已编译宏,这是最好的方法。