The SAS Packages Framework, version 20220830:
- New metadata checks added for required SAS components and required SAS packages.
- New parameter `delTestWork` in `%generatePackage()` macro added. It indicates if `WORK` directories generated by user tests should be deleted, i.e. the (NO)WORKTERM option is set.
- Log aesthetics and readability improved in the `%generatePackages()` macro:
- subtitles added in the log,
- `stimer` turned off,
- some notes turned off.
- Generation of table with tests results updated.
- Documentation updated.
Packages regenerated with the new version of SPF:
- BasePlus
- SQLinDS
- macroArray
- DFA
- dynMacroArray
- GSM
SAS Packages:
To get started with SAS Packages try this Getting Started with SAS Packages presentation (see the ./SPF/Documentation directory).
Available packages:
Currently the following packages are available:
- SQLinDS[2.2], based on Mike Rhoads' article Use the Full Power of SAS in Your Function-Style Macros. The package allows to write SQL queries in the data step, e.g.
data class;
set %SQL(
select age, name, weight, height
from sashelp.class
order by age
);
WH = weight + height;
run;
SHA256 digest for SQLinDS: 96D0EFE02DF1AE0D7D875A10CAF7EF63CDEF85DD0CF9418934BEFAF0C067D453
- MacroCore[1], a macro library for SAS application developers. Over 100 macros for Base SAS, metadata, and Viya. Provided by the SASjs framework.
SHA256 digest for MacroCore: A23C29529F3CE7D0C8BEE9545C5D22D5B5594907547374A5135B8E5A48D7687B
- DFA (Dynamic Function Arrays)[0.5], contains set of macros and FCMP functions which implement: a dynamically allocated array, a stack, a fifo queue, an ordered stack, and a priority queue, run
%helpPackage(DFA,createDFArray)to find examples.
%createDFArray(ArrDynamic, resizefactor=17);
data _null_;
call ArrDynamic("Allocate", -2, 2);
do i = -2 to 2;
call ArrDynamic("Input", i, 2**i);
end;
L = .; H = .;
call ArrDynamic("Dim", L, H);
put L= H=;
call ArrDynamic("+", 3, 8);
call ArrDynamic("+",-3, 0.125);
call ArrDynamic("Dim", L, H);
put L= H=;
Value = .;
do i = L to H;
call ArrDynamic("O", i, Value);
put i= Value=;
end;
run;
SHA256 digest for DFA: 5BFFCE78439E1CDDCBB15C95CD287AA4195BF64BB17DDB8FE374EC3535B4F491
- macroArray[1.0], implementation of an array concept in a macro language, e.g.
%array(ABC[17] (111:127), macarray=Y);
%macro test();
%do i = 1 %to 17;
%put &i.) %ABC(&i.);
%end;
%mend;
%test()
%let %ABC(13,i) = 99999; /* i = insert */
%do_over(ABC, phrase=%nrstr(
%put &_i_.%) %ABC(&_i_.);
),
which = 1:H:2
);
SHA256 digest for macroArray: ED12BC96F8A4E9E7C4D651EC1E15479DB9B55D98B274B63C507ED842081F7AB7
- BasePlus[1.17] adds a bunch of functionalities I am missing in BASE SAS, such as:
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
call arrFill(42, myArray);
rc = delDataset("DataSetToDrop");
string = catXFn("date9.", "#", myArray);
format x bool.;
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
%rainCloudPlot(sashelp.cars,DriveTrain,Invoice)
%zipLibrary(sashelp,libOut=work)
SHA256 digest for BasePlus: 56B260350FEB7D5118F581B9EFD1B9CE1F0298DCB9A4C000A7654E2FF3F0298C
- GSM (Generate Secure Macros)[0.20], package allows to create secured macros stored in SAS Proc FCMP functions. The dataset with functions can be shared between different operating systems and allows to generate macros on site without showing their code.
SHA256 digest for GSM: 2AEBC150FBA99A4AAB0265A21C57E89200BFD96B633B898F32743D1C8831A159
- dynMacroArray[0.2], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA)
SHA256 digest for dynMacroArray: D7E0B8F85C05EBF8622204E0D2F3E990D48D0A9B3911051C3AD44DC98954DDCF