首页 > 解决方案 > 将 mymacro /source 复制到另一个库?

问题描述

假设我通过以下方式存储了一个宏:

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;

目标是方便地将宏从开发库复制到生产库。我怎样才能做到这一点 ?

标签: sassas-macro

解决方案


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 目录

此示例通过指定每个 SAS 库的物理文件名来连接三个 SAS 库,并将 libref ALLMINE 分配给连接的库:

libname allmine ('file-1' 'file-2' 'file-3');

如果每个库都包含一个名为 MYCAT 的 SAS 目录,则使用 ALLMINE.MYCAT 作为 libref.catref 可以访问存储在名为 MYCAT 的所有三个目录中的目录条目。要在逻辑上连接具有不同名称的 SAS 目录,请参阅 CATNAME 语句。

如果相同名称的目录包含相同名称的条目,则使用最早的库中的条目。

这在单元测试期间非常方便,因为在证明更新没有损坏之前不必更改原始文件。你有集成单元测试吗?;-)


推荐阅读