Sas 检索宏定义代码

Sas 检索宏定义代码,sas,sas-macro,Sas,Sas Macro,假设我定义了一个宏函数,由于某种原因(例如错误),我删除了代码。不过我还有宏 如何检索用于定义它的代码 要定义宏,我刚刚执行了: %macro(param1,param2); my code %mend; 如果使用指定的source选项定义宏,并在库中使用以下选项检索宏: %copy MACRO_NAME / source; SAS官方答案,请参见以下原始链接: 无法从存储的已编译宏中检索原始源代码。您必须始终将原始代码保存在另一个文件中,以便以后可以对其进行修改 从SAS®9.1开始,对

假设我定义了一个宏函数,由于某种原因(例如错误),我删除了代码。不过我还有宏

如何检索用于定义它的代码

要定义宏,我刚刚执行了:

%macro(param1,param2);
my code
%mend;

如果使用指定的
source
选项定义宏,并在库中使用以下选项检索宏:

 %copy MACRO_NAME / source;
SAS官方答案,请参见以下原始链接:

无法从存储的已编译宏中检索原始源代码。您必须始终将原始代码保存在另一个文件中,以便以后可以对其进行修改

SAS®9.1
开始,对于
%宏
语句有一个新的
选项。与现有的
存储
选项一起使用时,
选项组合并存储编译宏的源

编译后的宏代码成为永久
SAS
数据库中
SAS
目录中的一个条目。编译后的宏和源代码一起存储在同一个
SASMACR
目录中。
SOURCE
选项要求设置
STORE
选项和
SAS
选项
MSTORED
。您可以使用
SAS
选项
SASMSTORE=
识别永久
SAS
数据库。只有当
SAS
选项
MSTORED
有效时,才能存储宏或调用已存储的编译宏

注意:
source
选项保存的源代码以
%MACRO
关键字开头,在
%MEND
语句后以分号结尾。现在您已经有了使用
source
选项存储源代码的方法,您还需要一种检索此信息的方法。答案是新的
%COPY
语句,它从
SAS
宏库复制指定的项

例如:

libname test 'c:\';
options mstored sasmstore=test;  

%macro test(arg) / store source des="test of the source option";
  %put arg = &arg;
  data one;
    x=1;
    run;
%mend test;

%copy test / source;
资料来源:

如果您没有
源代码
选项,并且宏相对基本,您可以尝试使用MPRINT和SYMBOLGEN获取代码日志,但如果您有条件逻辑,则很难确定重新创建代码

options mprint symbolgen;
%my_macro(param1, param2);

您是否使用指定的
Source
选项定义了宏?如何在没有代码的情况下使用宏?您是否将编译后的版本存储到宏目录中?我将问题更新为clarifySo(简而言之,否:)。谢谢你的回答,我真的很喜欢这个源代码选项。但实际上,仍然有一种方法可以控制损坏,那就是设置所有日志选项以显示最大的细节,使用简单的参数执行宏,这样不会使它失败,使用数据步骤,内嵌指向宏的目录条目,并使用列表将一些记录转储到SAS日志中;statementCool,我只是在你的另一个答案上评论了一些类似的东西。还有一件事,为了避免这种情况,我将正在使用的宏保存在一个文件夹中,并将其添加到我的autoexec选项中。你能告诉我如何添加到autoexec吗?首先,我在SASWell还是个新手,所以实际上这不利于获得SAS帮助:),communities.SAS.com要好得多,而且有SAS员工来回答问题,包括开发人员。再加上对什么是“好”问题的限制较少,尽管坏问题仍然会有一些限制。缺乏历史。你们所有的问题都已经在SAS社区中得到了答案,而且可以追溯到更远的地方。