SAS Packages Framework, version 20230904

## SAS Packages Framework, version `20230904`

---

New features in this release are:
- in `%generatePackage()` macro - test for check of duplicated names of the same type was added to the package generation process.
- in `%loadPackage()` macro - User can now suppress running the `exec` type files during the loading process. Parameter name is `suppressExec=`.
- in `%helpPackage()` macro - User can now generate dataset `work.packageName_content` containing list of the package elements similar to the one printed in the log. Parameter name is `packageContentDS=`.

Documentation updated.

---

Packages regenerated with new version of the SPF:
- BasePlus package [ver. `1.29.1`]
- DFA package [ver. `0.5.6`]
- GSM package [ver. `0.21.1`]
- macroArray package [ver. `1.0.6`]
- SQLinDS package [ver. `2.2.7`]
- dynMacroArray package [ver. `0.2.6`]
This commit is contained in:
Bart Jablonski
2023-09-04 16:29:05 +02:00
parent 77d6b0a2e5
commit 98e2125028
28 changed files with 343 additions and 152 deletions

View File

@@ -14,7 +14,7 @@ In this repository we are presenting the **SAS Packages Framework** which allows
### Current version: ### Current version:
**The latest version** of SPF is **`20230520`**. **The latest version** of SPF is **`20230904`**.
To get started with SAS Packages try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). To get started with SAS Packages try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory).

View File

@@ -6,7 +6,7 @@
when empty the "packages" value is used */ when empty the "packages" value is used */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to list directories pointed by "packages" fileref, version 20230520. Run %extendPackagesFileref(HELP) for help info.' des = 'Macro to list directories pointed by "packages" fileref, version 20230904. Run %extendPackagesFileref(HELP) for help info.'
; ;
%if %QUPCASE(&packages.) = HELP %then %if %QUPCASE(&packages.) = HELP %then
@@ -22,7 +22,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20230520
%put ### This is short help information for the `extendPackagesFileref` macro #; %put ### This is short help information for the `extendPackagesFileref` macro #;
%put #-----------------------------------------------------------------------------------------#;; %put #-----------------------------------------------------------------------------------------#;;
%put # #; %put # #;
%put # Macro to list directories pointed by 'packages' fileref, version `20230520` #; %put # Macro to list directories pointed by 'packages' fileref, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -23,7 +23,7 @@
default value 1 means "delete tests work" */ default value 1 means "delete tests work" */
)/ secure minoperator )/ secure minoperator
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to generate SAS packages, version 20230520. Run %generatePackage() for help info.' des = 'Macro to generate SAS packages, version 20230904. Run %generatePackage() for help info.'
; ;
%if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then
%do; %do;
@@ -38,7 +38,7 @@ des = 'Macro to generate SAS packages, version 20230520. Run %generatePackage()
%put ### This is short help information for the `generatePackage` macro #; %put ### This is short help information for the `generatePackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to generate SAS packages, version `20230520` #; %put # Macro to generate SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -714,6 +714,34 @@ data _null_;
end; end;
run; run;
/*======== test for duplicated names of the same type ========*/
proc sort
data = &filesWithCodes.
out = &filesWithCodes._DUPSCHECK
;
by type file order;
run;
data _null_;
set &filesWithCodes._DUPSCHECK;
by type file;
if first.file NE last.file then
do;
if 0 = warnPrinted then
do;
put "WARNING: The following names are duplicated:";
warnPrinted+1;
end;
put "WARNING- " type= file= folder=;
end;
run;
proc delete data = &filesWithCodes._DUPSCHECK;
run;
/*=============================================================*/
%if %superq(additionalContent) NE %then %if %superq(additionalContent) NE %then
%do; %do;
/* code inspired by Kurt Bremser's "Talking to Your Host" article */ /* code inspired by Kurt Bremser's "Talking to Your Host" article */
@@ -936,7 +964,8 @@ data _null_;
put ' , options = %str(LOWCASE_MEMNAME) /* possible options for ZIP */ '; put ' , options = %str(LOWCASE_MEMNAME) /* possible options for ZIP */ ';
put ' , zip = zip /* file ext. */ '; put ' , zip = zip /* file ext. */ ';
put ' , requiredVersion = . /* required version */ '; put ' , requiredVersion = . /* required version */ ';
put ' , source2 = /* source2*/ '; put ' , source2 = /* source2 */ ';
put ' , suppressExec = 0 /* suppress execs */ ';
put ' )/secure; '; put ' )/secure; ';
put ' %PUT ** NOTE: Package ' "&packageName." ' loaded in ICE mode **; '; put ' %PUT ** NOTE: Package ' "&packageName." ' loaded in ICE mode **; ';
put ' %local _PackageFileref_; '; put ' %local _PackageFileref_; ';
@@ -980,6 +1009,9 @@ data _null_;
put ' %local tempLoad_minoperator; '; put ' %local tempLoad_minoperator; ';
put ' %let tempLoad_minoperator = %sysfunc(getoption(minoperator)); '; put ' %let tempLoad_minoperator = %sysfunc(getoption(minoperator)); ';
put ' options minoperator; '; put ' options minoperator; ';
put ' %if %superq(suppressExec) NE 1 %then %let suppressExec = 0; ';
put ' %include &_PackageFileref_.(load.sas) / &source2.; '; put ' %include &_PackageFileref_.(load.sas) / &source2.; ';
put ' options &tempLoad_minoperator.; '; put ' options &tempLoad_minoperator.; ';
@@ -1345,22 +1377,33 @@ data _null_;
"exist. It will be overwritten by the macro from the &packageName. package, ));"; "exist. It will be overwritten by the macro from the &packageName. package, ));";
if upcase(type)=:'EXEC' then if upcase(type)=:'EXEC' then
do; do;
put ' %put NOTE- ;'; /* User can suppress running the exec files */
put ' %put NOTE- Executing the following code: ;'; put ' %sysfunc(ifc(1 = %superq(suppressExec)'
put ' %put NOTE- *****************************;'; / ' ,%nrstr(%%put INFO: Inclusion of EXEC files is suppressed!;)'
put ' data _null_;'; / ' ,%str('
put " infile &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') lrecl=32767;'; / ' data _null_;'
put ' input;'; / ' if _N_=1 then'
put ' putlog "*> " _infile_;'; / ' put "NOTE- " /'
put ' run;'; / ' "NOTE- Executing the following code:" /'
put ' %put NOTE- *****************************;'; / ' "NOTE- *****************************" / ;'
put ' %put NOTE- ;'; / " infile &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') lrecl=32767 end=EOF;'
end; / ' input;'
/ ' putlog "*> " _infile_;'
/* include the file with the code of the element */ / ' if EOF=1 then'
put ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;'; / ' put "NOTE- *****************************" /'
/ ' "NOTE- " / ;'
/ ' run;'
/ ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;'
/ ' )));'
;
end;
else
do;
/* include the file with the code of the element */
put ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;';
end;
if upcase(type)=:'IMLMODULE' then if upcase(type)=:'IMLMODULE' then
put ' %let cherryPick_IML = %eval(&cherryPick_IML. + 1);'; put ' %let cherryPick_IML = %eval(&cherryPick_IML. + 1);';
@@ -1478,7 +1521,7 @@ data _null_;
%end; %end;
put +(-1) '`.;''' / put +(-1) '`.;''' /
' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' /
' !! '' %put with the SAS Packages Framework version 20230520.;''' / ' !! '' %put with the SAS Packages Framework version 20230904.;''' /
' !! '' %put ****************************************************************************;''' / ' !! '' %put ****************************************************************************;''' /
' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %GOTO theEndOfTheMacro;''' /
' !! '' %end;''' ; ' !! '' %end;''' ;
@@ -1651,7 +1694,7 @@ data _null_;
%end; %end;
put +(-1) '`.; '' !!' / put +(-1) '`.; '' !!' /
''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' / ''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' /
''' %put with the SAS Packages Framework version 20230520.; '' !! ' / ''' %put with the SAS Packages Framework version 20230904.; '' !! ' /
''' %put ****************************************************************************; '' !! ' / ''' %put ****************************************************************************; '' !! ' /
''' %GOTO theEndOfTheMacro; '' !! ' / ''' %GOTO theEndOfTheMacro; '' !! ' /
''' %end; '' !! ' / ''' %end; '' !! ' /
@@ -2267,7 +2310,7 @@ data _null_;
put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;"; put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;";
%end; %end;
put 'put "***"; put "* SAS package generated by generatePackage, version 20230520 *"; put "***";'; put 'put "***"; put "* SAS package generated by generatePackage, version 20230904 *"; put "***";';
put 'run; ' /; put 'run; ' /;
@@ -2361,15 +2404,37 @@ data _null_;
put " stop; "; put " stop; ";
put "run; "; put "run; ";
/* cleanup */ /* clean up */
put "proc delete data = WORK._last_; "; put "proc delete data = WORK._last_; ";
put "run; "; put "run; ";
put 'options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; ' /;
/* generate dataset witch content information */
put 'data &packageContentDS. _NULL_; '
/ ' if "&packageContentDS." = " " then stop; '
/ ' infile cards4 dlm = "/"; '
/ ' input (folder order type file fileshort) (: $ 256.); '
/ ' output; '
/ 'cards4; '
;
EOFDS = 0;
do until(EOFDS);
/* content is created during package creation */
set &filesWithCodes. end = EOFDS;
if upcase(type) in: ('TEST') then continue; /* exclude tests */
strX = catx('/', folder, order, type, file, fileshort);
put strX;
end;
put ";;;;"
/ "run;"
/ 'options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; '
/ ;
put '%put NOTE: '"Help for package &packageName., version &packageVersion., license &packageLicense.;"; put '%put NOTE: '"Help for package &packageName., version &packageVersion., license &packageLicense.;";
put '%put NOTE- *** END ***;' /; put '%put NOTE- *** END ***;' /;
put "/* help.sas end */"; put "/* help.sas end */";
stop; stop;
run; run;

View File

@@ -20,11 +20,15 @@
if the zip is not available use a folder if the zip is not available use a folder
unpack data to "pipackage.disk" folder unpack data to "pipackage.disk" folder
and use helpPackage in the form: and use helpPackage in the form:
%helpPackage(PiPackage, *, zip=disk, options=) %helpPackage(PiPackage, *, zip=disk, options=) */
*/ , packageContentDS = 0 /* indicates if a data set with package
content should be generated in WORK,
if set to 1 then WORK.packageName_content
dataset is created
*/
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage() for help info.' des = 'Macro to get help about SAS package, version 20230904. Run %helpPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -39,7 +43,7 @@ des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage()
%put ### This is short help information for the `helpPackage` macro #; %put ### This is short help information for the `helpPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to get help about SAS packages, version `20230520` #; %put # Macro to get help about SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -80,6 +84,11 @@ des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage()
%put # and use helpPackage in the following form: #; %put # and use helpPackage in the following form: #;
%put # `%nrstr(%%helpPackage(PiPackage, ,zip=disk, options=))` #; %put # `%nrstr(%%helpPackage(PiPackage, ,zip=disk, options=))` #;
%put # #; %put # #;
%put # - `packageContentDS=` *Optional.* Indicates if a data set with package #;
%put # content should be generated in `WORK`, #;
%put # with default value (`0`) the dataset is not produced, #;
%put # if set to `1` then `WORK.packageName_content`. #;
%put # #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #; %put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #;
@@ -153,6 +162,9 @@ des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage()
%if %bquote(&packageEncoding.) NE %then &packageEncoding. ; %if %bquote(&packageEncoding.) NE %then &packageEncoding. ;
%else utf8 ; %else utf8 ;
; ;
%if 1=%superq(packageContentDS) %then %let packageContentDS=work.&packageName._content;
%else %let packageContentDS=;
%include &_PackageFileref_.(help.sas) / &source2.; %include &_PackageFileref_.(help.sas) / &source2.;
%end; %end;
%else %put ERROR:[&sysmacroname] File "&path./&packageName..&zip." does not exist!; %else %put ERROR:[&sysmacroname] File "&path./&packageName..&zip." does not exist!;
@@ -169,7 +181,7 @@ TODO:
- add MD5(&packageName.) value hash instead "package" word in filenames [DONE] - add MD5(&packageName.) value hash instead "package" word in filenames [DONE]
*/ */
/* Macros to install SAS packages, version 20230520 */ /* Macros to install SAS packages, version 20230904 */
/* A SAS package is a zip file containing a group of files /* A SAS package is a zip file containing a group of files
with SAS code (macros, functions, data steps generating with SAS code (macros, functions, data steps generating
data, etc.) wrapped up together and %INCLUDEed by data, etc.) wrapped up together and %INCLUDEed by

View File

@@ -16,7 +16,7 @@
/secure /secure
minoperator minoperator
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to install SAS package, version 20230520. Run %%installPackage() for help info.' des = 'Macro to install SAS package, version 20230904. Run %%installPackage() for help info.'
; ;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
%do; %do;
@@ -31,7 +31,7 @@ des = 'Macro to install SAS package, version 20230520. Run %%installPackage() fo
%put ### This is short help information for the `installPackage` macro #; %put ### This is short help information for the `installPackage` macro #;
%put #--------------------------------------------------------------------------------------------#;; %put #--------------------------------------------------------------------------------------------#;;
%put # #; %put # #;
%put # Macro to install SAS packages, version `20230520` #; %put # Macro to install SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -483,7 +483,7 @@ des = 'Macro to install SAS package, version 20230520. Run %%installPackage() fo
/* Macro to list SAS packages in packages folder. /* Macro to list SAS packages in packages folder.
Version 20230520 Version 20230904
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating

View File

@@ -1,7 +1,7 @@
/*+listPackages+*/ /*+listPackages+*/
%macro listPackages()/secure PARMBUFF %macro listPackages()/secure PARMBUFF
des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20230520.' des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20230904.'
; ;
%if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then
%do; %do;
@@ -16,7 +16,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE
%put ### This is short help information for the `listPackages` macro #; %put ### This is short help information for the `listPackages` macro #;
%put #-----------------------------------------------------------------------------------------#;; %put #-----------------------------------------------------------------------------------------#;;
%put # #; %put # #;
%put # Macro to list available SAS packages, version `20230520` #; %put # Macro to list available SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -166,7 +166,7 @@ options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
/* Macro to generate SAS packages. /* Macro to generate SAS packages.
Version 20230520 Version 20230904
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating

View File

@@ -23,17 +23,18 @@
if the zip is not available use a folder if the zip is not available use a folder
unpack data to "pipackage.disk" folder unpack data to "pipackage.disk" folder
and use loadPackage in the form: and use loadPackage in the form:
%loadPackage(PiPackage, zip=disk, options=) %loadPackage(PiPackage, zip=disk, options=) */
*/
, cherryPick=* /* space separated list of selected elements of the package , cherryPick=* /* space separated list of selected elements of the package
to be loaded into the session, default value "*" means to be loaded into the session, default value "*" means
"load all elements of the package" "load all elements of the package" */
*/
, loadAddCnt=0 /* should the additional content be loaded? , loadAddCnt=0 /* should the additional content be loaded?
default is 0 - means No, 1 means Yes */ default is 0 - means No, 1 means Yes */
, suppressExec=0 /* indicates if loading of exec files
should be suppressed, 1=suppress
*/
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to load SAS package, version 20230520. Run %loadPackage() for help info.' des = 'Macro to load SAS package, version 20230904. Run %loadPackage() for help info.'
minoperator minoperator
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
@@ -49,7 +50,7 @@ minoperator
%put ### This is short help information for the `loadPackage` macro #; %put ### This is short help information for the `loadPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to *load* SAS packages, version `20230520` #; %put # Macro to *load* SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -105,6 +106,10 @@ minoperator
%put # directory in `<packageName>_AdditionalContent` folder. #; %put # directory in `<packageName>_AdditionalContent` folder. #;
%put # For other locations use `%nrstr(%%loadPackageAddCnt())` macro. #; %put # For other locations use `%nrstr(%%loadPackageAddCnt())` macro. #;
%put # #; %put # #;
%put # - `suppressExec=` *Optional.* Indicates if loading of `exec` type files #;
%put # should be suppressed, default value is `0`, #;
%put # when set to `1` `exec` files are *not* loaded #;
%put # #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #; %put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #;
@@ -201,6 +206,11 @@ minoperator
%let loadAddCnt = 0; %let loadAddCnt = 0;
%end; %end;
%if %superq(suppressExec) NE 1 %then
%do;
%let suppressExec = 0;
%end;
filename &_PackageFileref_. &ZIP. filename &_PackageFileref_. &ZIP.
/* put location of package myPackageFile.zip here */ /* put location of package myPackageFile.zip here */
"&path./%lowcase(&packageName.).&zip." %unquote(&options.) "&path./%lowcase(&packageName.).&zip." %unquote(&options.)

View File

@@ -19,7 +19,7 @@
is provided in required version */ is provided in required version */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to load additional content for a SAS package, version 20230520. Run %loadPackageAddCnt() for help info.' des = 'Macro to load additional content for a SAS package, version 20230904. Run %loadPackageAddCnt() for help info.'
minoperator minoperator
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
@@ -35,7 +35,7 @@ minoperator
%put ### This is short help information for the `loadPackageAddCnt` macro #; %put ### This is short help information for the `loadPackageAddCnt` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to *load* additional content for a SAS package, version `20230520` #; %put # Macro to *load* additional content for a SAS package, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -11,7 +11,7 @@
*/ */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to load multiple SAS packages at one run, version 20230520. Run %loadPackages() for help info.' des = 'Macro to load multiple SAS packages at one run, version 20230904. Run %loadPackages() for help info.'
parmbuff parmbuff
; ;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
@@ -27,7 +27,7 @@ parmbuff
%put ### This is short help information for the `loadPackageS` macro #; %put ### This is short help information for the `loadPackageS` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro wrapper for the loadPackage macro, version `20230520` #; %put # Macro wrapper for the loadPackage macro, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -23,7 +23,7 @@
*/ */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to preview content of a SAS package, version 20230520. Run %previewPackage() for help info.' des = 'Macro to preview content of a SAS package, version 20230904. Run %previewPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -38,7 +38,7 @@ des = 'Macro to preview content of a SAS package, version 20230520. Run %preview
%put ### This is short help information for the `previewPackage` macro #; %put ### This is short help information for the `previewPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to get previwe of a SAS packages, version `20230520` #; %put # Macro to get previwe of a SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -20,7 +20,7 @@
*/ */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to unload SAS package, version 20230520. Run %unloadPackage() for help info.' des = 'Macro to unload SAS package, version 20230904. Run %unloadPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -35,7 +35,7 @@ des = 'Macro to unload SAS package, version 20230520. Run %unloadPackage() for h
%put ### This is short help information for the `unloadPackage` macro #; %put ### This is short help information for the `unloadPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to unload SAS packages, version `20230520` #; %put # Macro to unload SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -13,7 +13,7 @@
hashing_file() function, SAS 9.4M6 */ hashing_file() function, SAS 9.4M6 */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to verify SAS package with the hash digest, version 20230520. Run %verifyPackage() for help info.' des = 'Macro to verify SAS package with the hash digest, version 20230904. Run %verifyPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -28,7 +28,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20230520. Run %
%put ### This is short help information for the `verifyPackage` macro #; %put ### This is short help information for the `verifyPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to verify SAS package with it hash digest, version `20230520` #; %put # Macro to verify SAS package with it hash digest, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -22,7 +22,7 @@ A **SAS package** is an automatically generated, single, stand alone *zip* file
The *purpose of a package* is to be a simple, and easy to access, code sharing medium, which will allow: on the one hand, to separate the code complex dependencies created by the developer from the user experience with the final product and, on the other hand, reduce developer's and user's unnecessary frustration related to a remote deployment process. The *purpose of a package* is to be a simple, and easy to access, code sharing medium, which will allow: on the one hand, to separate the code complex dependencies created by the developer from the user experience with the final product and, on the other hand, reduce developer's and user's unnecessary frustration related to a remote deployment process.
In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20230520`**. In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20230905`**.
**To get started with SAS Packages** try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). **To get started with SAS Packages** try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory).
@@ -40,7 +40,7 @@ After assigning the directory do not change them when using the SPF since it may
## This is short help information for the `installPackage` macro <a name="installpackage"></a> ## This is short help information for the `installPackage` macro <a name="installpackage"></a>
-------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------
Macro to install SAS packages, version `20230520` Macro to install SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -149,7 +149,7 @@ filename packages "C:/SAS_PACKAGES";
## This is short help information for the `helpPackage` macro <a name="helppackage"></a> ## This is short help information for the `helpPackage` macro <a name="helppackage"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to get help about SAS packages, version `20230520` Macro to get help about SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -190,6 +190,11 @@ filename packages "C:/SAS_PACKAGES";
and use helpPackage in the following form: and use helpPackage in the following form:
`%helpPackage(PiPackage, , zip=disk, options=)` `%helpPackage(PiPackage, , zip=disk, options=)`
- `packageContentDS=` *Optional.* Indicates if a data set with package
content should be generated in `WORK`,
with default value (`0`) the dataset is not produced,
if set to `1` then `WORK.packageName_content`.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation`
@@ -220,7 +225,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages;
## This is short help information for the `loadPackage` macro <a name="loadpackage"></a> ## This is short help information for the `loadPackage` macro <a name="loadpackage"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to *load* SAS packages, version `20230520` Macro to *load* SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -276,6 +281,10 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages;
directory in `<packageName>_AdditionalContent` folder. directory in `<packageName>_AdditionalContent` folder.
For other locations use `%loadPackageAddCnt()` macro. For other locations use `%loadPackageAddCnt()` macro.
- `suppressExec=` *Optional.* Indicates if loading of `exec` type files
should be suppressed, default value is `0`,
when set to `1` `exec` files are *not* loaded
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation`
@@ -368,7 +377,7 @@ If created, those macros are automatically deleted when the `%unloadPackage()` m
## This is short help information for the `loadPackageS` macro <a name="loadpackages"></a> ## This is short help information for the `loadPackageS` macro <a name="loadpackages"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro wrapper for the loadPackage macro, version `20230520` Macro wrapper for the loadPackage macro, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -417,7 +426,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages;
## This is short help information for the `unloadPackage` macro <a name="unloadpackage"></a> ## This is short help information for the `unloadPackage` macro <a name="unloadpackage"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to unload SAS packages, version `20230520` Macro to unload SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -482,7 +491,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages;
## This is short help information for the `listPackages` macro <a name="listpackages"></a> ## This is short help information for the `listPackages` macro <a name="listpackages"></a>
----------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------
Macro to list available SAS packages, version `20230520` Macro to list available SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -523,7 +532,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages;
## This is short help information for the `verifyPackage` macro <a name="verifypackage"></a> ## This is short help information for the `verifyPackage` macro <a name="verifypackage"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to verify SAS package with it hash digest, version `20230520` Macro to verify SAS package with it hash digest, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -577,7 +586,7 @@ filename packages "C:/SAS_PACKAGES"; %* set-up a directory for packages;
## This is short help information for the `previewPackage` macro <a name="previewpackage"></a> ## This is short help information for the `previewPackage` macro <a name="previewpackage"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to get previwe of a SAS packages, version `20230520` Macro to get previwe of a SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -644,7 +653,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages;
## This is short help information for the `generatePackage` macro <a name="generatepackage"></a> ## This is short help information for the `generatePackage` macro <a name="generatepackage"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to generate SAS packages, version `20230520` Macro to generate SAS packages, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -837,7 +846,7 @@ All files have to have `.sas` extension. Other files are ignored.
## This is short help information for the `extendPackagesFileref` macro <a name="extendpackagesfileref"></a> ## This is short help information for the `extendPackagesFileref` macro <a name="extendpackagesfileref"></a>
----------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------
Macro to list directories pointed by 'packages' fileref, version `20230520` Macro to list directories pointed by 'packages' fileref, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -877,7 +886,7 @@ filename packages ("D:/NEW_DIR" %extendPackagesFileref()); %* add new directory;
## This is short help information for the `loadPackageAddCnt` macro <a name="loadpackageaddcnt"></a> ## This is short help information for the `loadPackageAddCnt` macro <a name="loadpackageaddcnt"></a>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Macro to load *additional content* for a SAS package, version `20230520` Macro to load *additional content* for a SAS package, version `20230905`
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating

View File

@@ -42,7 +42,7 @@
- to unload, or - to unload, or
- to generate SAS packages. - to generate SAS packages.
Version 20230520. Version 20230904.
See examples below. See examples below.
A SAS package is a zip file containing a group of files A SAS package is a zip file containing a group of files
@@ -78,17 +78,18 @@
if the zip is not available use a folder if the zip is not available use a folder
unpack data to "pipackage.disk" folder unpack data to "pipackage.disk" folder
and use loadPackage in the form: and use loadPackage in the form:
%loadPackage(PiPackage, zip=disk, options=) %loadPackage(PiPackage, zip=disk, options=) */
*/
, cherryPick=* /* space separated list of selected elements of the package , cherryPick=* /* space separated list of selected elements of the package
to be loaded into the session, default value "*" means to be loaded into the session, default value "*" means
"load all elements of the package" "load all elements of the package" */
*/
, loadAddCnt=0 /* should the additional content be loaded? , loadAddCnt=0 /* should the additional content be loaded?
default is 0 - means No, 1 means Yes */ default is 0 - means No, 1 means Yes */
, suppressExec=0 /* indicates if loading of exec files
should be suppressed, 1=suppress
*/
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to load SAS package, version 20230520. Run %loadPackage() for help info.' des = 'Macro to load SAS package, version 20230904. Run %loadPackage() for help info.'
minoperator minoperator
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
@@ -104,7 +105,7 @@ minoperator
%put ### This is short help information for the `loadPackage` macro #; %put ### This is short help information for the `loadPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to *load* SAS packages, version `20230520` #; %put # Macro to *load* SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -160,6 +161,10 @@ minoperator
%put # directory in `<packageName>_AdditionalContent` folder. #; %put # directory in `<packageName>_AdditionalContent` folder. #;
%put # For other locations use `%nrstr(%%loadPackageAddCnt())` macro. #; %put # For other locations use `%nrstr(%%loadPackageAddCnt())` macro. #;
%put # #; %put # #;
%put # - `suppressExec=` *Optional.* Indicates if loading of `exec` type files #;
%put # should be suppressed, default value is `0`, #;
%put # when set to `1` `exec` files are *not* loaded #;
%put # #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #; %put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #;
@@ -256,6 +261,11 @@ minoperator
%let loadAddCnt = 0; %let loadAddCnt = 0;
%end; %end;
%if %superq(suppressExec) NE 1 %then
%do;
%let suppressExec = 0;
%end;
filename &_PackageFileref_. &ZIP. filename &_PackageFileref_. &ZIP.
/* put location of package myPackageFile.zip here */ /* put location of package myPackageFile.zip here */
"&path./%lowcase(&packageName.).&zip." %unquote(&options.) "&path./%lowcase(&packageName.).&zip." %unquote(&options.)
@@ -350,7 +360,7 @@ minoperator
*/ */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to unload SAS package, version 20230520. Run %unloadPackage() for help info.' des = 'Macro to unload SAS package, version 20230904. Run %unloadPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -365,7 +375,7 @@ des = 'Macro to unload SAS package, version 20230520. Run %unloadPackage() for h
%put ### This is short help information for the `unloadPackage` macro #; %put ### This is short help information for the `unloadPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to unload SAS packages, version `20230520` #; %put # Macro to unload SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -506,11 +516,15 @@ des = 'Macro to unload SAS package, version 20230520. Run %unloadPackage() for h
if the zip is not available use a folder if the zip is not available use a folder
unpack data to "pipackage.disk" folder unpack data to "pipackage.disk" folder
and use helpPackage in the form: and use helpPackage in the form:
%helpPackage(PiPackage, *, zip=disk, options=) %helpPackage(PiPackage, *, zip=disk, options=) */
*/ , packageContentDS = 0 /* indicates if a data set with package
content should be generated in WORK,
if set to 1 then WORK.packageName_content
dataset is created
*/
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage() for help info.' des = 'Macro to get help about SAS package, version 20230904. Run %helpPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -525,7 +539,7 @@ des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage()
%put ### This is short help information for the `helpPackage` macro #; %put ### This is short help information for the `helpPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to get help about SAS packages, version `20230520` #; %put # Macro to get help about SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -566,6 +580,11 @@ des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage()
%put # and use helpPackage in the following form: #; %put # and use helpPackage in the following form: #;
%put # `%nrstr(%%helpPackage(PiPackage, ,zip=disk, options=))` #; %put # `%nrstr(%%helpPackage(PiPackage, ,zip=disk, options=))` #;
%put # #; %put # #;
%put # - `packageContentDS=` *Optional.* Indicates if a data set with package #;
%put # content should be generated in `WORK`, #;
%put # with default value (`0`) the dataset is not produced, #;
%put # if set to `1` then `WORK.packageName_content`. #;
%put # #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #; %put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #;
@@ -639,6 +658,9 @@ des = 'Macro to get help about SAS package, version 20230520. Run %helpPackage()
%if %bquote(&packageEncoding.) NE %then &packageEncoding. ; %if %bquote(&packageEncoding.) NE %then &packageEncoding. ;
%else utf8 ; %else utf8 ;
; ;
%if 1=%superq(packageContentDS) %then %let packageContentDS=work.&packageName._content;
%else %let packageContentDS=;
%include &_PackageFileref_.(help.sas) / &source2.; %include &_PackageFileref_.(help.sas) / &source2.;
%end; %end;
%else %put ERROR:[&sysmacroname] File "&path./&packageName..&zip." does not exist!; %else %put ERROR:[&sysmacroname] File "&path./&packageName..&zip." does not exist!;
@@ -655,7 +677,7 @@ TODO:
- add MD5(&packageName.) value hash instead "package" word in filenames [DONE] - add MD5(&packageName.) value hash instead "package" word in filenames [DONE]
*/ */
/* Macros to install SAS packages, version 20230520 */ /* Macros to install SAS packages, version 20230904 */
/* A SAS package is a zip file containing a group of files /* A SAS package is a zip file containing a group of files
with SAS code (macros, functions, data steps generating with SAS code (macros, functions, data steps generating
data, etc.) wrapped up together and %INCLUDEed by data, etc.) wrapped up together and %INCLUDEed by
@@ -680,7 +702,7 @@ TODO:
/secure /secure
minoperator minoperator
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to install SAS package, version 20230520. Run %%installPackage() for help info.' des = 'Macro to install SAS package, version 20230904. Run %%installPackage() for help info.'
; ;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
%do; %do;
@@ -695,7 +717,7 @@ des = 'Macro to install SAS package, version 20230520. Run %%installPackage() fo
%put ### This is short help information for the `installPackage` macro #; %put ### This is short help information for the `installPackage` macro #;
%put #--------------------------------------------------------------------------------------------#;; %put #--------------------------------------------------------------------------------------------#;;
%put # #; %put # #;
%put # Macro to install SAS packages, version `20230520` #; %put # Macro to install SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -1147,7 +1169,7 @@ des = 'Macro to install SAS package, version 20230520. Run %%installPackage() fo
/* Macro to list SAS packages in packages folder. /* Macro to list SAS packages in packages folder.
Version 20230520 Version 20230904
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -1168,7 +1190,7 @@ des = 'Macro to install SAS package, version 20230520. Run %%installPackage() fo
/*+listPackages+*/ /*+listPackages+*/
%macro listPackages()/secure PARMBUFF %macro listPackages()/secure PARMBUFF
des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20230520.' des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20230904.'
; ;
%if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then
%do; %do;
@@ -1183,7 +1205,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE
%put ### This is short help information for the `listPackages` macro #; %put ### This is short help information for the `listPackages` macro #;
%put #-----------------------------------------------------------------------------------------#;; %put #-----------------------------------------------------------------------------------------#;;
%put # #; %put # #;
%put # Macro to list available SAS packages, version `20230520` #; %put # Macro to list available SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -1333,7 +1355,7 @@ options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
/* Macro to generate SAS packages. /* Macro to generate SAS packages.
Version 20230520 Version 20230904
A SAS package is a zip file containing a group A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating of SAS codes (macros, functions, data steps generating
@@ -1370,7 +1392,7 @@ options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.;
default value 1 means "delete tests work" */ default value 1 means "delete tests work" */
)/ secure minoperator )/ secure minoperator
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to generate SAS packages, version 20230520. Run %generatePackage() for help info.' des = 'Macro to generate SAS packages, version 20230904. Run %generatePackage() for help info.'
; ;
%if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then
%do; %do;
@@ -1385,7 +1407,7 @@ des = 'Macro to generate SAS packages, version 20230520. Run %generatePackage()
%put ### This is short help information for the `generatePackage` macro #; %put ### This is short help information for the `generatePackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to generate SAS packages, version `20230520` #; %put # Macro to generate SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -2061,6 +2083,34 @@ data _null_;
end; end;
run; run;
/*======== test for duplicated names of the same type ========*/
proc sort
data = &filesWithCodes.
out = &filesWithCodes._DUPSCHECK
;
by type file order;
run;
data _null_;
set &filesWithCodes._DUPSCHECK;
by type file;
if first.file NE last.file then
do;
if 0 = warnPrinted then
do;
put "WARNING: The following names are duplicated:";
warnPrinted+1;
end;
put "WARNING- " type= file= folder=;
end;
run;
proc delete data = &filesWithCodes._DUPSCHECK;
run;
/*=============================================================*/
%if %superq(additionalContent) NE %then %if %superq(additionalContent) NE %then
%do; %do;
/* code inspired by Kurt Bremser's "Talking to Your Host" article */ /* code inspired by Kurt Bremser's "Talking to Your Host" article */
@@ -2283,7 +2333,8 @@ data _null_;
put ' , options = %str(LOWCASE_MEMNAME) /* possible options for ZIP */ '; put ' , options = %str(LOWCASE_MEMNAME) /* possible options for ZIP */ ';
put ' , zip = zip /* file ext. */ '; put ' , zip = zip /* file ext. */ ';
put ' , requiredVersion = . /* required version */ '; put ' , requiredVersion = . /* required version */ ';
put ' , source2 = /* source2*/ '; put ' , source2 = /* source2 */ ';
put ' , suppressExec = 0 /* suppress execs */ ';
put ' )/secure; '; put ' )/secure; ';
put ' %PUT ** NOTE: Package ' "&packageName." ' loaded in ICE mode **; '; put ' %PUT ** NOTE: Package ' "&packageName." ' loaded in ICE mode **; ';
put ' %local _PackageFileref_; '; put ' %local _PackageFileref_; ';
@@ -2327,6 +2378,9 @@ data _null_;
put ' %local tempLoad_minoperator; '; put ' %local tempLoad_minoperator; ';
put ' %let tempLoad_minoperator = %sysfunc(getoption(minoperator)); '; put ' %let tempLoad_minoperator = %sysfunc(getoption(minoperator)); ';
put ' options minoperator; '; put ' options minoperator; ';
put ' %if %superq(suppressExec) NE 1 %then %let suppressExec = 0; ';
put ' %include &_PackageFileref_.(load.sas) / &source2.; '; put ' %include &_PackageFileref_.(load.sas) / &source2.; ';
put ' options &tempLoad_minoperator.; '; put ' options &tempLoad_minoperator.; ';
@@ -2692,22 +2746,33 @@ data _null_;
"exist. It will be overwritten by the macro from the &packageName. package, ));"; "exist. It will be overwritten by the macro from the &packageName. package, ));";
if upcase(type)=:'EXEC' then if upcase(type)=:'EXEC' then
do; do;
put ' %put NOTE- ;'; /* User can suppress running the exec files */
put ' %put NOTE- Executing the following code: ;'; put ' %sysfunc(ifc(1 = %superq(suppressExec)'
put ' %put NOTE- *****************************;'; / ' ,%nrstr(%%put INFO: Inclusion of EXEC files is suppressed!;)'
put ' data _null_;'; / ' ,%str('
put " infile &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') lrecl=32767;'; / ' data _null_;'
put ' input;'; / ' if _N_=1 then'
put ' putlog "*> " _infile_;'; / ' put "NOTE- " /'
put ' run;'; / ' "NOTE- Executing the following code:" /'
put ' %put NOTE- *****************************;'; / ' "NOTE- *****************************" / ;'
put ' %put NOTE- ;'; / " infile &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') lrecl=32767 end=EOF;'
end; / ' input;'
/ ' putlog "*> " _infile_;'
/* include the file with the code of the element */ / ' if EOF=1 then'
put ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;'; / ' put "NOTE- *****************************" /'
/ ' "NOTE- " / ;'
/ ' run;'
/ ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;'
/ ' )));'
;
end;
else
do;
/* include the file with the code of the element */
put ' %include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;';
end;
if upcase(type)=:'IMLMODULE' then if upcase(type)=:'IMLMODULE' then
put ' %let cherryPick_IML = %eval(&cherryPick_IML. + 1);'; put ' %let cherryPick_IML = %eval(&cherryPick_IML. + 1);';
@@ -2825,7 +2890,7 @@ data _null_;
%end; %end;
put +(-1) '`.;''' / put +(-1) '`.;''' /
' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' /
' !! '' %put with the SAS Packages Framework version 20230520.;''' / ' !! '' %put with the SAS Packages Framework version 20230904.;''' /
' !! '' %put ****************************************************************************;''' / ' !! '' %put ****************************************************************************;''' /
' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %GOTO theEndOfTheMacro;''' /
' !! '' %end;''' ; ' !! '' %end;''' ;
@@ -2998,7 +3063,7 @@ data _null_;
%end; %end;
put +(-1) '`.; '' !!' / put +(-1) '`.; '' !!' /
''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' / ''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' /
''' %put with the SAS Packages Framework version 20230520.; '' !! ' / ''' %put with the SAS Packages Framework version 20230904.; '' !! ' /
''' %put ****************************************************************************; '' !! ' / ''' %put ****************************************************************************; '' !! ' /
''' %GOTO theEndOfTheMacro; '' !! ' / ''' %GOTO theEndOfTheMacro; '' !! ' /
''' %end; '' !! ' / ''' %end; '' !! ' /
@@ -3614,7 +3679,7 @@ data _null_;
put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;"; put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;";
%end; %end;
put 'put "***"; put "* SAS package generated by generatePackage, version 20230520 *"; put "***";'; put 'put "***"; put "* SAS package generated by generatePackage, version 20230904 *"; put "***";';
put 'run; ' /; put 'run; ' /;
@@ -3708,15 +3773,37 @@ data _null_;
put " stop; "; put " stop; ";
put "run; "; put "run; ";
/* cleanup */ /* clean up */
put "proc delete data = WORK._last_; "; put "proc delete data = WORK._last_; ";
put "run; "; put "run; ";
put 'options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; ' /;
/* generate dataset witch content information */
put 'data &packageContentDS. _NULL_; '
/ ' if "&packageContentDS." = " " then stop; '
/ ' infile cards4 dlm = "/"; '
/ ' input (folder order type file fileshort) (: $ 256.); '
/ ' output; '
/ 'cards4; '
;
EOFDS = 0;
do until(EOFDS);
/* content is created during package creation */
set &filesWithCodes. end = EOFDS;
if upcase(type) in: ('TEST') then continue; /* exclude tests */
strX = catx('/', folder, order, type, file, fileshort);
put strX;
end;
put ";;;;"
/ "run;"
/ 'options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.; '
/ ;
put '%put NOTE: '"Help for package &packageName., version &packageVersion., license &packageLicense.;"; put '%put NOTE: '"Help for package &packageName., version &packageVersion., license &packageLicense.;";
put '%put NOTE- *** END ***;' /; put '%put NOTE- *** END ***;' /;
put "/* help.sas end */"; put "/* help.sas end */";
stop; stop;
run; run;
@@ -4598,7 +4685,7 @@ TODO: (in Polish)
*/ */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to load multiple SAS packages at one run, version 20230520. Run %loadPackages() for help info.' des = 'Macro to load multiple SAS packages at one run, version 20230904. Run %loadPackages() for help info.'
parmbuff parmbuff
; ;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
@@ -4614,7 +4701,7 @@ parmbuff
%put ### This is short help information for the `loadPackageS` macro #; %put ### This is short help information for the `loadPackageS` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro wrapper for the loadPackage macro, version `20230520` #; %put # Macro wrapper for the loadPackage macro, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -4711,7 +4798,7 @@ parmbuff
hashing_file() function, SAS 9.4M6 */ hashing_file() function, SAS 9.4M6 */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to verify SAS package with the hash digest, version 20230520. Run %verifyPackage() for help info.' des = 'Macro to verify SAS package with the hash digest, version 20230904. Run %verifyPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -4726,7 +4813,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20230520. Run %
%put ### This is short help information for the `verifyPackage` macro #; %put ### This is short help information for the `verifyPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to verify SAS package with it hash digest, version `20230520` #; %put # Macro to verify SAS package with it hash digest, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -4905,7 +4992,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20230520. Run %
*/ */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to preview content of a SAS package, version 20230520. Run %previewPackage() for help info.' des = 'Macro to preview content of a SAS package, version 20230904. Run %previewPackage() for help info.'
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do; %do;
@@ -4920,7 +5007,7 @@ des = 'Macro to preview content of a SAS package, version 20230520. Run %preview
%put ### This is short help information for the `previewPackage` macro #; %put ### This is short help information for the `previewPackage` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to get previwe of a SAS packages, version `20230520` #; %put # Macro to get previwe of a SAS packages, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -5047,7 +5134,7 @@ des = 'Macro to preview content of a SAS package, version 20230520. Run %preview
when empty the "packages" value is used */ when empty the "packages" value is used */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to list directories pointed by "packages" fileref, version 20230520. Run %extendPackagesFileref(HELP) for help info.' des = 'Macro to list directories pointed by "packages" fileref, version 20230904. Run %extendPackagesFileref(HELP) for help info.'
; ;
%if %QUPCASE(&packages.) = HELP %then %if %QUPCASE(&packages.) = HELP %then
@@ -5063,7 +5150,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20230520
%put ### This is short help information for the `extendPackagesFileref` macro #; %put ### This is short help information for the `extendPackagesFileref` macro #;
%put #-----------------------------------------------------------------------------------------#;; %put #-----------------------------------------------------------------------------------------#;;
%put # #; %put # #;
%put # Macro to list directories pointed by 'packages' fileref, version `20230520` #; %put # Macro to list directories pointed by 'packages' fileref, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;
@@ -5164,7 +5251,7 @@ filename packages list;
is provided in required version */ is provided in required version */
)/secure )/secure
/*** HELP END ***/ /*** HELP END ***/
des = 'Macro to load additional content for a SAS package, version 20230520. Run %loadPackageAddCnt() for help info.' des = 'Macro to load additional content for a SAS package, version 20230904. Run %loadPackageAddCnt() for help info.'
minoperator minoperator
; ;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
@@ -5180,7 +5267,7 @@ minoperator
%put ### This is short help information for the `loadPackageAddCnt` macro #; %put ### This is short help information for the `loadPackageAddCnt` macro #;
%put #-------------------------------------------------------------------------------#; %put #-------------------------------------------------------------------------------#;
%put # #; %put # #;
%put # Macro to *load* additional content for a SAS package, version `20230520` #; %put # Macro to *load* additional content for a SAS package, version `20230904` #;
%put # #; %put # #;
%put # A SAS package is a zip file containing a group #; %put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #; %put # of SAS codes (macros, functions, data steps generating #;

View File

@@ -10,7 +10,7 @@ Packages:
--- ---
- **SQLinDS**\[2.2.6\], 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. - **SQLinDS**\[2.2.7\], 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.
```sas ```sas
data class; data class;
set %SQL( set %SQL(
@@ -22,13 +22,13 @@ data class;
WH = weight + height; WH = weight + height;
run; run;
``` ```
SHA256 digest for SQLinDS: F*3BB422E8C94515DEE9E13E674A0D119794F464D9597C28D5D536E71F64EB5298 SHA256 digest for SQLinDS: F*42DC179E1D2B946AD519C4EC04A068061B312E021C3F4BC4826D2775E116E1B9
[Documentation for SQLinDS](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/sqlinds.md "Documentation for SQLinDS") [Documentation for SQLinDS](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/sqlinds.md "Documentation for SQLinDS")
--- ---
- **DFA** (Dynamic Function Arrays)\[0.5.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. - **DFA** (Dynamic Function Arrays)\[0.5.6\], 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.
```sas ```sas
%createDFArray(ArrDynamic, resizefactor=17); %createDFArray(ArrDynamic, resizefactor=17);
@@ -55,13 +55,13 @@ data _null_;
end; end;
run; run;
``` ```
SHA256 digest for DFA: F*924711C77E413B8CFC18336DDA2293A9F5294D02E267C1BB7BC876B4AF0AABE4 SHA256 digest for DFA: F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B31D9B7C62
[Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA") [Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA")
--- ---
- **macroArray**\[1.0.5\], implementation of an array concept in a macro language, e.g. - **macroArray**\[1.0.6\], implementation of an array concept in a macro language, e.g.
```sas ```sas
%array(ABC[17] (111:127), macarray=Y); %array(ABC[17] (111:127), macarray=Y);
@@ -80,13 +80,13 @@ SHA256 digest for DFA: F*924711C77E413B8CFC18336DDA2293A9F5294D02E267C1BB7BC876B
which = 1:H:2 which = 1:H:2
); );
``` ```
SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B4555A963180D767160 SHA256 digest for macroArray: F*4FAAEE7DF2854EA31933AE017A89C1615C7291A66A07CCE345041EB0D587ED4E
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray")
--- ---
- **BasePlus**\[1.29.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: - **BasePlus**\[1.29.1\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas ```sas
call arrMissToRight(myArray); call arrMissToRight(myArray);
call arrFillMiss(17, myArray); call arrFillMiss(17, myArray);
@@ -110,25 +110,25 @@ format x bool.;
%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); %put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$);
``` ```
SHA256 digest for BasePlus: F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7 SHA256 digest for BasePlus: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
--- ---
- **GSM** (Generate Secure Macros)\[0.21.0\], package allows - **GSM** (Generate Secure Macros)\[0.21.1\], package allows
to create secured macros stored in SAS Proc FCMP functions. to create secured macros stored in SAS Proc FCMP functions.
The dataset with functions can be shared between different operating systems The dataset with functions can be shared between different operating systems
and allows to generate macros on site without showing their code. and allows to generate macros on site without showing their code.
SHA256 digest for GSM: F*56DC0DCCE06B4281BF3FA6FA3875CBA87772BDA7FAB601B06740A7980FFB0E07 SHA256 digest for GSM: F*2FECDDB568B38E206CA4ADA6FDEF5209C0A08B99401A1510D777BABF9DA54682
[Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM") [Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM")
--- ---
- **dynMacroArray**\[0.2.5\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold. - **dynMacroArray**\[0.2.6\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold.
SHA256 digest for dynMacroArray: F*6E087F38BB39B93CBF983124272812E14693C4EF5EE0A3A218BD2BAA069A74BF SHA256 digest for dynMacroArray: F*F50BEDB542D96B07C763EAB7549FBC5F08ED389DC2338BFAAEBFBD1FD20E22B6
--- ---

View File

@@ -1,3 +1,11 @@
/* 20230904 */
BasePlus: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31
DFA: F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B31D9B7C62
dynMacroArray: F*F50BEDB542D96B07C763EAB7549FBC5F08ED389DC2338BFAAEBFBD1FD20E22B6
GSM: F*2FECDDB568B38E206CA4ADA6FDEF5209C0A08B99401A1510D777BABF9DA54682
macroArray: F*4FAAEE7DF2854EA31933AE017A89C1615C7291A66A07CCE345041EB0D587ED4E
SQLinDS: F*42DC179E1D2B946AD519C4EC04A068061B312E021C3F4BC4826D2775E116E1B9
/* 20230824 */ /* 20230824 */
BasePlus: F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7 BasePlus: F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7

View File

@@ -72,7 +72,7 @@
--- ---
# The BasePlus package [ver. 1.29.0] <a name="baseplus-package"></a> ############################################### # The BasePlus package [ver. 1.29.1] <a name="baseplus-package"></a> ###############################################
The **BasePlus** package implements useful The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS. functions and functionalities I miss in the BASE SAS.
@@ -385,10 +385,10 @@ Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load
or look for the baseplus_AdditionalContent directory in the Packages fileref or look for the baseplus_AdditionalContent directory in the Packages fileref
localization (only if additional content was deployed during the installation process). localization (only if additional content was deployed during the installation process).
* SAS package generated by generatePackage, version 20230520 * * SAS package generated by generatePackage, version 20230905 *
The SHA256 hash digest for package BasePlus: The SHA256 hash digest for package BasePlus:
`F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7` `F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31`
--- ---
# Content description ############################################################################################ # Content description ############################################################################################

Binary file not shown.

View File

@@ -18,7 +18,7 @@
--- ---
# The DFA package [ver. 0.5.5] <a name="dfa-package"></a> ############################################### # The DFA package [ver. 0.5.6] <a name="dfa-package"></a> ###############################################
The **DFA** (a.k.a. *Dynamic Function Array*) package implements: The **DFA** (a.k.a. *Dynamic Function Array*) package implements:
- dynamic numeric and character arrays, - dynamic numeric and character arrays,
@@ -52,10 +52,10 @@ Package contains:
12. exec generatearrays 12. exec generatearrays
13. clean generatearrays 13. clean generatearrays
*SAS package generated by generatePackage, version 20230411* *SAS package generated by generatePackage, version 20230905*
The SHA256 hash digest for package BasePlus: The SHA256 hash digest for package DFA:
`F*924711C77E413B8CFC18336DDA2293A9F5294D02E267C1BB7BC876B4AF0AABE4` `F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B31D9B7C62`
--- ---
# Content description ############################################################################################ # Content description ############################################################################################

Binary file not shown.

Binary file not shown.

View File

@@ -8,7 +8,7 @@
--- ---
# The GSM package [ver. 0.21.0] <a name="gsm-package"></a> ############################################### # The GSM package [ver. 0.21.1] <a name="gsm-package"></a> ###############################################
The **GSM** (a.k.a. *Generate Secure Macros*) package allows The **GSM** (a.k.a. *Generate Secure Macros*) package allows
to create secured macros stored in SAS Proc FCMP functions. to create secured macros stored in SAS Proc FCMP functions.
@@ -91,10 +91,10 @@ Package contains:
Required SAS Components: Required SAS Components:
`Base SAS Software` `Base SAS Software`
*SAS package generated by generatePackage, version 20230520* *SAS package generated by generatePackage, version 20230905*
The SHA256 hash digest for package GSM: The SHA256 hash digest for package GSM:
`F*56DC0DCCE06B4281BF3FA6FA3875CBA87772BDA7FAB601B06740A7980FFB0E07` `F*2FECDDB568B38E206CA4ADA6FDEF5209C0A08B99401A1510D777BABF9DA54682`
## >>> `%GSM()` macro: <<< <a name="gsm-macro"></a> ####################### ## >>> `%GSM()` macro: <<< <a name="gsm-macro"></a> #######################

Binary file not shown.

View File

@@ -19,7 +19,7 @@
--- ---
# The macroArray package [ver. 1.0.5] <a name="macroarray-package"></a> ############################################### # The macroArray package [ver. 1.0.6] <a name="macroarray-package"></a> ###############################################
The **macroArray** package implements a macro array facility: The **macroArray** package implements a macro array facility:
- `%array()`, - `%array()`,
@@ -75,10 +75,10 @@ Package contains:
Required SAS Components: Required SAS Components:
*Base SAS Software* *Base SAS Software*
*SAS package generated by generatePackage, version 20230411* *SAS package generated by generatePackage, version 20230905*
The SHA256 hash digest for package macroArray: The SHA256 hash digest for package macroArray:
`F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B4555A963180D767160` `F*4FAAEE7DF2854EA31933AE017A89C1615C7291A66A07CCE345041EB0D587ED4E`
--- ---
# Content description ############################################################################################ # Content description ############################################################################################

Binary file not shown.

View File

@@ -8,7 +8,7 @@
--- ---
# The SQLinDS package [ver. 2.2.6] <a name="sqlinds-package"></a> ############################################### # The SQLinDS package [ver. 2.2.7] <a name="sqlinds-package"></a> ###############################################
The **SQLinDS** package is an implementation of The **SQLinDS** package is an implementation of
the *macro-function-sandwich* concept introduced in the the *macro-function-sandwich* concept introduced in the
@@ -49,10 +49,10 @@ Package contains:
Required SAS Components: Required SAS Components:
*Base SAS Software* *Base SAS Software*
*SAS package generated by generatePackage, version 20230411* *SAS package generated by generatePackage, version 20230905*
The SHA256 hash digest for package SQLinDS: The SHA256 hash digest for package SQLinDS:
`F*3BB422E8C94515DEE9E13E674A0D119794F464D9597C28D5D536E71F64EB5298` `F*42DC179E1D2B946AD519C4EC04A068061B312E021C3F4BC4826D2775E116E1B9`
--- ---
# Content description ############################################################################################ # Content description ############################################################################################

Binary file not shown.