1.方式一:%include
%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.
2.方式二:mautolocdisplay
Example:
filename autoM “C:\SESUGTEST\AUTOCALL_MACROS\”;
options mautolocdisplay mautosource sasautos = (autoM) ;
The macro is saved in the folder with fileref autoM as sortDS.sas 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.
3.方式3:STORED COMPILED MACRO FACILITY
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
facility.
具体实现:
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;
Advantages:
? 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.
Disadvantage:
? Cannot be moved directly to other operating systems.
? Must be saved and recompiled under new OS at any new location.
将方式3的宏屏蔽的方法:
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...
%mend;
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
|