macros - SAS:重命名宏目录

标签 macros sas catalog

我想将宏存储在目录中。这样做允许多个宏仅在一个文件中共享,并在一定程度上与用户分离。

为了存储我的宏,我运行一个程序,例如

/* HelloWorld.sas */
libname pwd ".";              /* assign current directory */
option mstored sasmstore=pwd; /* set pwd as storage directory */ 

%macro HelloWorld() 
    / store source;           /* store compiled macro along with its source */
  data _null_;
    put "Hello, World!";
  run;
%mend;

这会在 HelloWorld.sas 所在的目录中创建一个 sasmacr.sas7bcat 文件。然后,我可以将该文件移动到另一个目录,例如 C:\myMacros 并运行以下程序:

/* CallHelloWorld.sas */
libname myMacros 'C:\myMacros';
option mstored sasmstore=myMacros;

%HelloWorld();

调用宏 HelloWorld() 时没有错误。

但是,如果我想将 HelloWorld() 宏视为“HelloWorld”宏套件的一部分,我不能简单地将 Windows 资源管理器中的目录名称从 sasmacr.sas7bcatHelloWorld.sas7bcat。当我执行此操作并尝试再次运行 CallHelloWorld.sas 时(关闭并重新打开 SAS 后),宏未解析。

1    /* CallHelloWorld.sas */
2    libname myMacros 'C:\myMacros';
NOTE: Libref MYMACROS was successfully assigned as follows:
      Engine:        V9
      Physical Name: C:\myMacros
3    option mstored sasmstore=myMacros;
4
5    %HelloWorld();
     -
     180
NOTE: The SAS System was unable to open the macro library referenced by the SASMSTORE = libref
      MYMACROS.
WARNING: Apparent invocation of macro HELLOWORLD not resolved.

ERROR 180-322: Statement is not valid or it is used out of proper order.

ERROR: Catalog MYMACROS.SASMACR does not exist.
NOTE: The SAS System was unable to open the macro library referenced by the SASMSTORE = libref
      MYMACROS.
ERROR: An error occurred during the execution of the %COPY statement.

如何更改包含宏的目录的名称,以便可以在各种程序中调用这些宏?是否可以预先将目录命名为与 sasmacr 不同的名称?

最佳答案

至少在带有 SAS 9.4 的 Unix 上,您可以使用 SASAUTOS 选项来指向使用 ZIP 引擎的 FILEREF,以便所有宏定义都存储在单个 ZIP 文件中。

一个“技巧”是您需要更改 ZIP 文件中成员文件的名称。通常,在 unix 上,SASAUTOS 要求使用小写的宏名称和 .sas 扩展名 (helloworld.sas) 来命名源文件。但要使 SASAUTOS 使用 ZIP 文件,应使用大写的宏名称来命名成员,不带扩展名 (HELLOWORLD)。

filename mymacros zip '~/mymacros.zip';
options insert=(sasautos=(mymacros)) ;

编辑

不幸的是,当在 ZIP 文件中找不到宏源文件时,此方法会导致 SAS 生成 ERROR: 消息,即使最终在 SASAUTOS 选项搜索路径中的另一个文件中找到它。

关于macros - SAS:重命名宏目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249484/

相关文章:

database - 产品目录最具可扩展性的数据模型是什么?

linux - 找不到 AX_CXX_COMPILE_STDCXX_11 宏

sas - 如何使用 SAS 计算加权平均值但排除对象本身

ios - 使用 Asset Catalog 特权从 URL 下载图像

php - Magento 产品分类

SAS 数组创建

c++ - 内联函数与预处理器宏

c - 获取宏以进行连接和字符串化

unit-testing - Google Test 中的自定义 EXPECT_NEAR 宏

sas - 优化SAS中的proc sql语句