sasjs / core

Macros for SASยฎ App Developers
https://core.sasjs.io
MIT License
118 stars 17 forks source link
sas sasjs viya

Macro Core

npm package Github Workflow npm GitHub top language GitHub closed issues GitHub issues total lines Gitpod ready-to-code

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 welcome.

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://core.sasjs.io

Components

BASE folder (All Platforms)

DDL folder (All Platforms)

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 folder (All Platforms)

The fcmp macros are used to generate fcmp functions, and can be used with or without the proc fcmp wrapper.

LUA folder

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:

/* compile the lua module */
%ml_yourmodule()

/* Execute.  Do not use the restart keyword! */
proc lua;
submit;
  print(yourStuff);
endsubmit;
run;

META folder (SAS9 only)

Macros used in SAS EBI, which connect to the metadata server.

METAX folder (SAS9 only)

SERVER folder (@sasjs/server only)

These macros are used for building applications using @sasjs/server - an open source REST API for Desktop SAS.

VIYA folder (Viya only)

Macros used for interfacing with SAS Viya.

XPLATFORM folder (Viya, Meta, and Server)

Sometimes it is helpful to use a macro that can be used interchangeably regardless of the server type on which is is running (SASVIYA, SAS9, SASJS).

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:

%let repoloc=/your/path/core;
options insert=(sasautos="&repoloc/base");
options insert=(sasautos="&repoloc/ddl");
options insert=(sasautos="&repoloc/fcmp");
options insert=(sasautos="&repoloc/lua");
options insert=(sasautos="&repoloc/meta");
options insert=(sasautos="&repoloc/metax");
options insert=(sasautos="&repoloc/server");
options insert=(sasautos="&repoloc/viya");
options insert=(sasautos="&repoloc/xplatform");

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;

Standards

File Properties

Header Properties

The Macro Core documentation is created using doxygen. A full list of attributes can be found here but the following are most relevant:

All macros must be commented in the doxygen format, to enable the online documentation.

Dependencies

SAS code can contain one of two types of dependency - SAS Macros, and SAS Includes. When compiling projects using the SASjs CLI the doxygen header is scanned for @li items under the following headers:

  <h4> SAS Macros </h4>
  @li mf_nobs.sas
  @li mm_assignlib.sas

  <h4> SAS Includes </h4>
  @li somefile.ddl SOMEFREF
  @li someprogram.sas FREFTWO

The CLI can then extract all the dependencies and insert as precode (SAS Macros) or in a temp engine fileref (SAS Includes) when creating SAS Jobs and Services (and Tests).

When contributing to this library, it is therefore important to ensure that all dependencies are listed in the header in this format.

Coding Standards

General Notes

Breaking Changes

We are currently on major release v4. Breaking changes should be marked with the deprecated doxygen tag. The following changes are planned when the next major/breaking release (v5) becomes necessary:

Star Gazing

If you find this library useful, please leave a star and help us grow our star graph!

Other SAS Repositories

The following repositories are also worth checking out:

Contributors โœจ

All Contributors

Thanks goes to these wonderful people (emoji key):

Allan Bowe
Allan Bowe

๐Ÿ’ผ ๐Ÿ’ป ๐Ÿ–‹ ๐Ÿ“– ๐Ÿš‡ ๐Ÿšง ๐Ÿง‘โ€๐Ÿซ ๐Ÿ’ฌ ๐Ÿ‘€ โš ๏ธ
rafgag
rafgag

๐Ÿ’ป
Trevor Moody
Trevor Moody

๐Ÿ’ป
Krishna Acondy
Krishna Acondy

๐Ÿ’ป ๐Ÿš‡ ๐Ÿ“ ๐Ÿ–‹ ๐Ÿค” ๐Ÿ“น
Muhammad Saad
Muhammad Saad

๐Ÿ’ป ๐Ÿค”
Yury Shkoda
Yury Shkoda

๐Ÿ’ป ๐Ÿš‡ ๐Ÿ“น
Mihajlo Medjedovic
Mihajlo Medjedovic

๐Ÿš‡
kkchandok
kkchandok

๐Ÿค”
Vladislav Parhomchik
Vladislav Parhomchik

โš ๏ธ ๐Ÿ‘€
Vignesh T.
Vignesh T.

๐Ÿ›
Bart Jablonski
Bart Jablonski

๐Ÿ’ป
Ikko Ashimine
Ikko Ashimine

๐Ÿ’ป
Henrik Forsell
Henrik Forsell

๐Ÿ“–
Rud Faden
Rud Faden

๐Ÿ’ป
andyjessen
andyjessen

๐Ÿ“–

This project follows the all-contributors specification. Contributions of any kind welcome!