检索宏定义代码
Retrieve macro definition code
假设我定义了一个宏函数,由于某些原因(例如错误),我删除了代码。不过我还有宏。
如何找回我用来定义它的代码?
要定义宏,我刚刚执行了:
%macro(param1,param2);
my code
%mend;
如果您使用指定的 source
选项定义了宏,并且在库中,您可以使用以下方法检索它:
%copy MACRO_NAME / source;
SAS 官方答案,请参阅下面的原始 link:
无法从存储的已编译宏中检索原始源代码。您必须始终将原始代码保存在另一个文件中,以便您以后可以对其进行修改。
从 SAS® 9.1
开始,%MACRO
语句有一个新的 SOURCE
选项。当与现有的 STORE
选项一起使用时,SOURCE
选项组合并存储编译宏的源代码。
编译后的宏代码成为永久 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;
如果您没有 SOURCE
选项并且您的宏相对基础,您可以尝试使用 MPRINT 和 SYMBOLGEN 来获取带有代码的日志,但是如果您有条件逻辑,这将很难以确保重新创建代码。
options mprint symbolgen;
%my_macro(param1, param2);
假设我定义了一个宏函数,由于某些原因(例如错误),我删除了代码。不过我还有宏。
如何找回我用来定义它的代码?
要定义宏,我刚刚执行了:
%macro(param1,param2);
my code
%mend;
如果您使用指定的 source
选项定义了宏,并且在库中,您可以使用以下方法检索它:
%copy MACRO_NAME / source;
SAS 官方答案,请参阅下面的原始 link:
无法从存储的已编译宏中检索原始源代码。您必须始终将原始代码保存在另一个文件中,以便您以后可以对其进行修改。
从 SAS® 9.1
开始,%MACRO
语句有一个新的 SOURCE
选项。当与现有的 STORE
选项一起使用时,SOURCE
选项组合并存储编译宏的源代码。
编译后的宏代码成为永久 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;
如果您没有 SOURCE
选项并且您的宏相对基础,您可以尝试使用 MPRINT 和 SYMBOLGEN 来获取带有代码的日志,但是如果您有条件逻辑,这将很难以确保重新创建代码。
options mprint symbolgen;
%my_macro(param1, param2);