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
vs
sasmacr
@Joe只提到了
sasmacr
holdmacr
只是一个目标目录,目的是演示如何将宏条目从一个目录复制到另一个目录
holdmacr
在SAS会话中没有起到任何作用。多亏了你们两位,在
SAS
标签上没有多少回答者,但我很惊讶的是,回答通常很快,而且质量总是一流的。啊。。。单元测试。。。我有一些,没有达到我能接受的标准,但这些东西需要时间,而且已经远远超出了我的工作范围:)。你能告诉我更多关于
holdmacr
vs
sasmacr
@Joe只提到了
sasmacr
holdmacr
只是一个目标目录,目的是演示如何将宏条目从一个目录复制到另一个目录
holdmacr
在SAS会话中没有操作角色。非常感谢Joe一如既往的回答很好,我不得不将它与@Richard的回答混合在一起,因为他提到了
select…/et=宏位,但你没有。我也很欣赏关于工作流程的提示,向我的团队教授
git
会很费时,所以我选择了一条更简单的路线。git非常容易学。。这是一个比处理目录更好的方法!非常感谢Joe像往常一样回答得很好,当@Richard提到
select…/et=宏位,但你没有。我也很欣赏关于工作流程的提示,向我的团队教授
git
会很费时,所以我选择了一条更简单的路线。git非常容易学。。这是一个比处理目录更好的方法!