清除用于存储编译的 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.
任何人都可以提供建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 SAS 9.3 或更高版本中,您现在可以使用 %SYSMSTORECLEAR 语句。
In SAS 9.3 or higher, you can now clear the libref using the %SYSMSTORECLEAR Statement.
简短的回答 - 我认为您不能在同一个 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.