Sas 是否将mymacro/源复制到另一个库?
假设我以以下方式存储宏:Sas 是否将mymacro/源复制到另一个库?,sas,sas-macro,Sas,Sas Macro,假设我以以下方式存储宏: options mstored sasmstore=FOO; %macro hello_world() / STORE SOURCE DES='hello world'; %put hello world; %mend; 现在,我想将此宏从库FOO复制到库BAR,我想这样做(这显然不起作用): 这相当于: options mstored sasmstore=BAR; %macro hello_world() / STORE SOURCE DES='hello wo
options mstored sasmstore=FOO;
%macro hello_world() / STORE SOURCE DES='hello world';
%put hello world;
%mend;
现在,我想将此宏从库FOO
复制到库BAR
,我想这样做(这显然不起作用):
这相当于:
options mstored sasmstore=BAR;
%macro hello_world() / STORE SOURCE DES='hello world';
%put hello world;
%mend;
目标是方便地将宏从开发库复制到生产库。如何执行此操作?
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
声明
如果同名目录包含相同的命名条目,则使用最早的库中的条目
这在单元测试期间非常方便,因为在证明更新没有破坏性之前,不必修改原始版本。您有集成单元测试,对吗?;-) 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
声明
如果同名目录包含相同的命名条目,则使用最早的库中的条目
这在单元测试期间非常方便,因为在证明更新没有破坏性之前,不必修改原始版本。您有集成单元测试,对吗?;-) 如果您只想将宏移动到生产环境中,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存储和部署源文件-但是如果您更喜欢存储编译的宏,这是最好的方法。如果您只想将宏移动到生产环境中,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存储和部署源文件-但如果您更喜欢存储编译的宏,这是最好的方法。多亏了你们两位,在sas
标签上没有太多回答者,但我很惊讶答案通常很快,质量总是一流的。啊。。。单元测试。。。我有一些,没有达到我能接受的标准,但这些东西需要时间,而且已经远远超出了我的工作范围:)。你能告诉我更多关于holdmacr
vssasmacr
@Joe只提到了sasmacr
holdmacr
只是一个目标目录,目的是演示如何将宏条目从一个目录复制到另一个目录holdmacr
在SAS会话中没有起到任何作用。多亏了你们两位,在SAS
标签上没有多少回答者,但我很惊讶的是,回答通常很快,而且质量总是一流的。啊。。。单元测试。。。我有一些,没有达到我能接受的标准,但这些东西需要时间,而且已经远远超出了我的工作范围:)。你能告诉我更多关于holdmacr
vssasmacr
@Joe只提到了sasmacr
holdmacr
只是一个目标目录,目的是演示如何将宏条目从一个目录复制到另一个目录holdmacr
在SAS会话中没有操作角色。非常感谢Joe一如既往的回答很好,我不得不将它与@Richard的回答混合在一起,因为他提到了select…/et=宏代码>位,但你没有。我也很欣赏关于工作流程的提示,向我的团队教授git
会很费时,所以我选择了一条更简单的路线。git非常容易学。。这是一个比处理目录更好的方法!非常感谢Joe像往常一样回答得很好,当@Richard提到select…/et=宏代码>位,但你没有。我也很欣赏关于工作流程的提示,向我的团队教授git
会很费时,所以我选择了一条更简单的路线。git非常容易学。。这是一个比处理目录更好的方法!