Skip to content
/ core Public
forked from sasjs/core

Production quality macros for SAS® Application Developers

License

Notifications You must be signed in to change notification settings

rafgag/core

This branch is 1254 commits behind sasjs/core:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9d9a722 · Jul 30, 2020

History

10 Commits
Jul 9, 2020
Jul 29, 2020
Jul 29, 2020
Jul 7, 2020
Jul 30, 2020
Jul 7, 2020
Jul 15, 2020
Jul 7, 2020
Jul 7, 2020
Jul 7, 2020
Jul 7, 2020
Jul 9, 2020
Jul 30, 2020
Jul 7, 2020
Jul 7, 2020
Jul 9, 2020
Jul 7, 2020
Jul 9, 2020

Repository files navigation

Macro Core

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

Components

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

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:

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;

Standards

File Properties

  • 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

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:

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

Coding Standards

  • 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, not blah). 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;

General Notes

  • 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).

About

Production quality macros for SAS® Application Developers

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • SAS 93.8%
  • CSS 3.7%
  • Lua 1.5%
  • HTML 0.4%
  • Python 0.4%
  • Shell 0.2%