moodymudskipper
moodymudskipper

Reputation: 47300

Retrieve macro definition code

Say I have defined a macro function, and for some reason (e.g. a mistake), I deleted the code. I still have the macro though.

How can I retrieve the code I used to define it ?

To define the macro, I just executed:

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

Upvotes: 2

Views: 1074

Answers (2)

Reeza
Reeza

Reputation: 21264

If you don't have the SOURCE option and your macro is relatively basic you could try using the MPRINT and SYMBOLGEN to get the log with the code but if you have conditional logic it'll be hard to recreate the code for sure.

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

Upvotes: 1

Reeza
Reeza

Reputation: 21264

If you defined the macro with the source option specified and in a library you can retrieve it with the following:

 %copy MACRO_NAME / source;

Official SAS answer, see original link below:

There is no way to retrieve the original source code from a stored compiled macro. You must always save the original code in another file so that you can modify it later.

Starting with SAS® 9.1, there is a new SOURCE option for the %MACRO statement. When used with the existing STORE option, the SOURCE option combines and stores the source of the compiled macro.

The compiled macro code becomes an entry in a SAS catalog in a permanent SAS data library. The compiled macro and the source code are stored together in the same SASMACR catalog. The SOURCE option requires that the STORE option and the SAS option MSTORED be set. You can use the SAS option SASMSTORE= to identify a permanent SAS data library. You can store a macro or call a stored compiled macro only when the SAS option MSTORED is in effect.

Note: The source code that is saved by the SOURCE option begins with the %MACRO keyword and ends with a semicolon following the %MEND statement. Now that you have a way to store the source code with the SOURCE option, you also need a way to retrieve this information. The answer is the new %COPY statement, which copies specified items from a SAS macro library.

For example:

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: http://support.sas.com/kb/22/352.html

Upvotes: 3

Related Questions