来源:互联网 时间:2016-01-03


%include "full_path\sortds.txt"; inserts any code in the file called sortds.txt into your program

at the location of the %include statement. Using this method, the macro must be recompiled every

time a %INCLUDE is executed.

Advantage: This approach was presented in SAS? at least 15+ years ago; it is an easy to use and straight

forward approach.

Disadvantage: The macro definition is compiled every time the %INCLUDE is executed.




options mautolocdisplay mautosource sasautos = (autoM) ;

The macro is saved in the folder with fileref autoM as but it is not a SAS? program, it is a macro. In our

program, we call the macro using %sortDS. Once the macro is called, we can see the source of macro code in the

log .

The advantage of using the autocall facility is that all user-defined macros are stored in a standard location and they

are not compiled until they are actually needed. The macro is stored uncompiled in an autocall library. It removes the

macro definition from the calling program itself. Macros defined in separate programs must be recompiled every time

that program is execute but the macro is compiled only once and then the compiled version can be reused during the

SAS? session without recompilation.


The most exciting method of saving macros is using the store compiled macro facility. The stored compiled macro

facility compiles and saves the macro source code in a permanent catalog. This compilation occurs one time, and can

store the source code permanently in a SASMACR catalog. Programs can always be retrieved, the macro will work,

but SAS? (macro processor) will not compile the macro again. This is the great feature of the stored compiled macro



options mstored sasmstore=mjstore;

libname mjstore “C:\SESUGTEST\Compiled_macro_library\”;

%macro sortDS (in=, out =, by=) / store source des="get sortDS macro“ ;

* Macro for sorting data set &in. ;

proc sort data = &in.

out = &out. ;

by &by. ;

run ;

%mend sortDS;


? No repeated compiling of macro programs that are repeatedly used

? Possibility of displaying the entries in a catalog containing compiled macros saving macro compile time

? There is no need to save and maintain the source for the macro definition in a different location

? Keeping track of macros is easy

? Storing more then one macro per file

? Compile and Store is faster because there is a decrease in time for searching, %including, compiling and storing

in the WORK.SASMACR catalog.


? Cannot be moved directly to other operating systems.

? Must be saved and recompiled under new OS at any new location.


There is a way to hide code when executed so that it does not appear in the log. To avoid displaying code in the log,

store the code as a stored compiled macro. Because the macro is stored compiled, it cannot be seen in an editor.

More importantly, the options that write information about the code to the log can be turned off in the macro. The

following is a simple example:


libname libref 'macro-storage-library-name';

options mstored sasmstore=libref;

%macro sortDS / store;

options nonotes nomlogic nomprint nosymbolgen nosource nosource2;

...more SAS? statements...


By storing the code as a compiled macro, virtually no information is written to the log about the code. Only warnings

and errors will be written to the log