# Macro Core [![npm package][npm-image]][npm-url] [![Github Workflow][githubworkflow-image]][githubworkflow-url]   [](/LICENSE)  [](https://github.com/sasjs/core/issues?q=is%3Aissue+is%3Aclosed) [](https://github.com/sasjs/core/issues)  [](https://gitpod.io/#https://github.com/sasjs/core) [npm-image]:https://img.shields.io/npm/v/@sasjs/core.svg [npm-url]:http://npmjs.org/package/@sasjs/core [githubworkflow-image]:https://github.com/sasjs/core/actions/workflows/main.yml/badge.svg [githubworkflow-url]:https://github.com/sasjs/core/blob/main/.github/workflows/main.yml [dependency-url]:https://github.com/sasjs/core/blob/main/package.json 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](https://sasapps.io) on the SAS platform (eg https://datacontroller.io). [Contributions](https://github.com/sasjs/core/blob/main/.github/CONTRIBUTING.md) are welcome. You can download and compile them all in just two lines of SAS code: ```sas filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas"; %inc mc; ``` Documentation: https://core.sasjs.io ## Components ### BASE library (All Platforms) - OS independent - Works on all SAS Platforms - No X command - Prefixes: _mf_, _mp_ ### DDL library (All Platforms) - OS independent - Works on all SAS Platforms - No X command - Prefixes: _mddl_(lib)_ -> where lib can be "SAS" (in relation to a SAS component) or "DC" (in relation to a Data Controller component) This library will not be used for storing data entries (such as formats or datalines). Where this becomes necessary in the future, a new repo will be created, in order to keep the NPM bundle size down (for the benefit of those looking to embed purely macros in their applications). ### FCMP library (All Platforms) - Function and macro names are identical, except for special cases - Prefixes: _mcf_ The fcmp macros are used to generate fcmp functions, and can be used with or without the `proc fcmp` wrapper. ### META library (SAS9 only) Macros used in SAS EBI, which connect to the metadata server. - OS independent - Metadata aware - No X command - Prefixes: _mm_ ### SERVER library (@sasjs/server only) These macros are used for building applications using [@sasjs/server](https://server.sasjs.io) - an open source REST API for Desktop SAS. - OS independent - @sasjs/server aware - No X command - Prefixes: _ms_ ### VIYA library (Viya only) Macros used for interfacing with SAS Viya. - OS independent - No X command - Prefixes: _mv_, _mvf_ ### METAX library (SAS9 only) - OS specific - Metadata aware - X command enabled - Prefixes: _mmw_,_mmu_,_mmx_ ### LUA library Wait - this is a macro library - what is LUA doing here? Well, it is a little known fact that you CAN run LUA within a SAS Macro. It has to be written to a text file with a `.lua` extension, from where you can `%include` it. So, without using the `proc lua` wrapper. To contribute, simply write your freeform LUA in the LUA folder. Then run the `build.py`, which will convert all files with a ".lua" extension into a macro wrapper with an `ml_` prefix (embedding the necessary data step put statements). You can then use your module in any program by running: ```sas /* compile the lua module */ %ml_yourmodule() /* Execute. Do not use the restart keyword! */ proc lua; submit; print(yourStuff); endsubmit; run; ``` - Prefixes: _ml_ ## Installation 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: ```sas 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. ```sas filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas"; %inc mc; ``` ## Standards ### File Properties - filenames much match macro names - filenames must be lowercase, without spaces - macro names must be lowercase - one macro per file - prefixes: - _mcf_ for macro compiled functions (proc fcmp) - _mddl_ for macros containing DDL (Data Definition Language) - _mf_ for macro functions (can be used in open code). - _ml_ for macros that are used to compile LUA modules - _mm_ for metadata macros (interface with the metadata server). - _mmx_ for macros that use metadata and are XCMD enabled (working on both windows and unix) - _mp_ for macro procedures (which generate sas code) - _ms_ for macro procedures that will only work with [@sasjs/server](https://github.com/sasjs/server) - _mv_ for macro procedures that will only work in Viya - _mx_ for macros that are XCMD enabled (working on both windows and unix) - follow verb-noun convention - unix style line endings (lf) - individual lines should be no more than 80 characters long - UTF-8 ### Header Properties The **Macro Core** documentation is created using [doxygen](http://www.doxygen.nl). A full list of attributes can be found [here](http://www.doxygen.nl/manual/commands.html) 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](http://www.stack.nl/~dimitri/doxygen/manual/markdown.html). - 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](https://core.sasjs.io). #### Dependencies SAS code can contain one of two types of dependency - SAS Macros, and SAS Includes. When compiling projects using the [SASjs CLI](https://cli.sasjs.io) the doxygen header is scanned for ` @li` items under the following headers: ```sas
Allan Bowe 💼 💻 🖋 📖 🚇 🚧 🧑🏫 💬 👀 ⚠️ |
rafgag 💻 |
Trevor Moody 💻 |
Krishna Acondy 💻 🚇 📝 🖋 🤔 📹 |
Muhammad Saad 💻 🤔 |
Yury Shkoda 💻 🚇 📹 |
Mihajlo Medjedovic 🚇 |
kkchandok 🤔 |
Vladislav Parhomchik ⚠️ 👀 |
Vignesh T. 🐛 |
Bart Jablonski 💻 |