Much quality. Many standards. The Macro Core library exists to save time and development effort! Herein ye shall find a veritable host of MIT-licenced, production quality SAS macros. These are a mix of tools, utilities, functions and code generators that are useful in the context of Application Development on the SAS platform (eg https://datacontroller.io). Contributions are welcomed.
You can download and compile them all in just two lines of SAS code:
filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc;
Documentation: https://sasjs.github.io/core.github.io/files.html
base library (SAS9/Viya)
- OS independent
- Not metadata aware
- No X command
- Prefixes: mf, mp
meta library (SAS9 only)
- OS independent
- Metadata aware
- No X command
- Prefixes: mm
viya library (Viya only)
- OS independent
- No X command
- Prefixes: mv
metax library (SAS9 only)
- OS specific
- Metadata aware
- X command enabled
- Prefixes: mmw,mmu,mmx
First, download the repo to a location your SAS system can access. Then update your sasautos path to include the components you wish to have available,eg:
options insert=(sasautos="/your/path/macrocore/base");
options insert=(sasautos="/your/path/macrocore/meta");
The above can be done directly in your sas program, via an autoexec, or an initialisation program.
Alternatively - for quick access - simply run the following! This file contains all the macros.
filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc;
- filenames much match macro names
- filenames must be lowercase
- macro names must be lowercase
- one macro per file
- prefixes:
- mf for macro functions (can be used in open code).
- mp for macro procedures (which generate sas code)
- mm for metadata macros (interface with the metadata server).
- mmx for macros that use metadata and are XCMD enabled
- mx for macros that are XCMD enabled
- mv for macros that will only work in Viya
- follow verb-noun convention
- unix style line endings (lf)
- individual lines should be no more than 80 characters long
- UTF-8
- no trailing white space
The Macro Core documentation is created using doxygen. A full list of attributes can be found here but the following are most relevant:
- file. This needs to be present in order to be recognised by doxygen.
- brief. This is a short (one sentence) description of the macro.
- details. A longer description, which can contain doxygen markdown.
- param. Name of each input param followed by a description.
- return. Explanation of what is returned by the macro.
- version. The EARLIEST SAS version in which this macro is known to work.
- author. Author name, contact details optional
All macros must be commented in the doxygen format, to enable the online documentation.
- Indentation = 2 spaces. No tabs!
- Macro variables should not have the trailing dot (
&var
not&var.
) unless necessary to prevent incorrect resolution - The closing
%mend;
should not contain the macro name. - All macros should be defined with brackets, even if no variables are needed - ie
%macro x();
not%macro x;
- Mandatory parameters should be positional, all optional parameters should be keyword (var=) style.
- All dataset references must be 2 level (eg
work.blah
, notblah
). This is to avoid contention when options DATASTMTCHK=ALLKEYWORDS is in effect. - Avoid naming collisions! All macro variables should be local scope. Use system generated work tables where possible - eg
data ; set sashelp.class; run; data &output; set &syslast; run;
- All macros should be compatible with SAS versions from support level B and above (so currently 9.2 and later). If an earlier version is not supported, then the macro should say as such in the header documentation, and exit gracefully (eg
%if %sysevalf(&sysver<9.3) %then %return
).