清除正用于存储的已编译SAS宏的库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清除正用于存储的已编译SAS宏的库相关的知识,希望对你有一定的参考价值。

我有一个程序,使用以下语法在库中创建存储的编译宏:

options mstored sasmstore=MyLib; 
%macro MyMac() /store source des='My Macro'; 
  %let x=1;
%mend;

但是我之后似乎无法重新分配我的库(MyLib) - 我得到以下消息(sas 9.1.3):

ERROR: Unable to clear or re-assign the library MYLIB because it is still in use.
ERROR: Error in the LIBNAME statement.

任何人都可以建议吗?

答案

在SAS 9.3或更高版本中,您现在可以使用%SYSMSTORECLEAR Statement清除libref。

另一答案

简短的回答 - 我认为你不能在同一个SAS会话中。

您无法清除libref,因为宏目录(SASMACR)保持打开状态。它保持开放,因为它需要资源来打开和关闭目录,而SAS假设编译的宏在生产作业中速度快,并且作为权衡,失去一些动态能力。在清除libref之前必须关闭所有资源。由于SASMACR仍然在使用(并且没有关闭会话似乎不是关闭它的方法),因此无法清除libref。

以上是关于清除正用于存储的已编译SAS宏的库的主要内容,如果未能解决你的问题,请参考以下文章

sas 宏的问题

如何有条件地 %include 一个定义宏的 *.sas 文件?

使用 IEFs-s-rEQ 宏的 MVS JES2 清除作业

inline内联函数

出现错误:无法清除或重新分配库 DATA1,因为它仍在 SAS 中使用

视图重新添加到视图寻呼机中的片段