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

发布于 2024-08-08 23:47:31 字数 382 浏览 5 评论 0 原文

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

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.

任何人都可以提供建议吗?

I have a program which creates a stored compiled macro in a library using the syntax:

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

However I cannot seem to re-assign my library (MyLib) afterwards - I get the following message (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.

Can anyone advise?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

咆哮 2024-08-15 23:47:31

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

In SAS 9.3 or higher, you can now clear the libref using the %SYSMSTORECLEAR Statement.

前事休说 2024-08-15 23:47:31

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

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

Short answer - I don't think you can in the same SAS session.

You can't clear the libref because the macro catalog (SASMACR) remains open. It stays open since it takes resources to open and close the catalog and SAS assumes that compiled macros are going for speed in production jobs and as a trade-off, lose some dynamic abilities. All resources have to be closed before you can clear the libref. Since SASMACR remains in use (and short of closing the session doesn't appear to be a way to close it), ther is no way to clear the libref.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文