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

时间:2009-10-27 10:44:07

标签: sas sas-macro

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

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.

有人可以提供建议吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

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