3

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

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.

任何人都可以建议吗?

4

2 回答 2

5

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

于 2018-03-27T12:50:40.557 回答
4

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

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

于 2009-10-27T13:05:50.277 回答