Skip to content

Commit

Permalink
SAS Packages Framework, version 20240927
Browse files Browse the repository at this point in the history
## SAS Packages Framework, version `20240927`

---

### Changes

- Aesthetic changes in log when running the `%installPackage()` macro, notes about successful/failed installation.
- New parameter `SFRCVN` added to the `%installPackage()` macro, `SFRCVN` provides a *name* for a macro variable to store value of the *success-failure return code* of the installation process. Return value has the following form: `<number of successes>.<number of failures>` The macro variable is created as a *global* macro variable.
- Documentation updated.

---
  • Loading branch information
yabwon committed Sep 27, 2024
1 parent 3f950e1 commit 45127a0
Show file tree
Hide file tree
Showing 17 changed files with 314 additions and 127 deletions.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2019 - 2023 Bartosz Jablonski
Copyright (c) 2019 - 2024 Bartosz Jablonski

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Don't forget to **STAR** (:star:) the repository! :-)

### Current version:

**The latest version** of SPF is **`20240711`**.
**The latest version** of SPF is **`20240927`**.

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

Expand Down
Binary file not shown.
4 changes: 2 additions & 2 deletions SPF/Macros/extendpackagesfileref.sas
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
when empty the "packages" value is used */
)/secure
/*** HELP END ***/
des = 'Macro to list directories pointed by "packages" fileref, version 20240711. Run %extendPackagesFileref(HELP) for help info.'
des = 'Macro to list directories pointed by "packages" fileref, version 20240927. Run %extendPackagesFileref(HELP) for help info.'
;

%if %QUPCASE(&packages.) = HELP %then
Expand All @@ -22,7 +22,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20240711
%put ### This is short help information for the `extendPackagesFileref` macro #;
%put #-----------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to list directories pointed by 'packages' fileref, version `20240711` #;
%put # Macro to list directories pointed by 'packages' fileref, version `20240927` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
Expand Down
16 changes: 8 additions & 8 deletions SPF/Macros/generatepackage.sas
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Macro to generate SAS packages.
Version 20240711
Version 20240927
A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating
Expand Down Expand Up @@ -43,7 +43,7 @@
file name be created */
)/ secure minoperator
/*** HELP END ***/
des = 'Macro to generate SAS packages, version 20240711. Run %generatePackage() for help info.'
des = 'Macro to generate SAS packages, version 20240927. Run %generatePackage() for help info.'
;
%if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then
%do;
Expand All @@ -58,7 +58,7 @@ des = 'Macro to generate SAS packages, version 20240711. Run %generatePackage()
%put ### This is short help information for the `generatePackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to generate SAS packages, version `20240711` #;
%put # Macro to generate SAS packages, version `20240927` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
Expand Down Expand Up @@ -855,7 +855,7 @@ title6 "MD5 hashed fileref of package lowcase name: &_PackageFileref_.";
title8 "Required SAS packages: %qsysfunc(compress(%superq(packageReqPackages),%str(%'%")))" ; /* " */
%end;

footnote1 "SAS Packages Framework, version 20240711";
footnote1 "SAS Packages Framework, version 20240927";

proc print data = &filesWithCodes.(drop=base folderRef fileRef rc folderid _abort_ fileId additionalContent);
run;
Expand Down Expand Up @@ -1576,7 +1576,7 @@ data _null_;
%end;
put +(-1) '`.;''' /
' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' /
' !! '' %put with the SAS Packages Framework version 20240711.;''' /
' !! '' %put with the SAS Packages Framework version 20240927.;''' /
' !! '' %put ****************************************************************************;''' /
' !! '' %GOTO theEndOfTheMacro;''' /
' !! '' %end;''' ;
Expand Down Expand Up @@ -1741,7 +1741,7 @@ data _null_;
%end;
put +(-1) '`.; '' !!' /
''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' /
''' %put with the SAS Packages Framework version 20240711.; '' !! ' /
''' %put with the SAS Packages Framework version 20240927.; '' !! ' /
''' %put ****************************************************************************; '' !! ' /
''' %GOTO theEndOfTheMacro; '' !! ' /
''' %end; '' !! ' /
Expand Down Expand Up @@ -2529,7 +2529,7 @@ data _null_;
%end;

put 'put " " / @3 "--------------------------------------------------------------------" / " ";'
/ 'put @3 "*SAS package generated by SAS Package Framework, version `20240711`*";'
/ 'put @3 "*SAS package generated by SAS Package Framework, version `20240927`*";'
/ 'put " " / @3 "--------------------------------------------------------------------";';

put 'run; ' /;
Expand Down Expand Up @@ -3566,7 +3566,7 @@ data &filesWithCodes.markdown;
%end;

put " " / "--------------------------------------------------------------------" / " "
/ "*SAS package generated by SAS Package Framework, version `20240711`*"
/ "*SAS package generated by SAS Package Framework, version `20240927`*"
/ " " / "--------------------------------------------------------------------" / " ";

put "# The `&packageName.` package content";
Expand Down
12 changes: 7 additions & 5 deletions SPF/Macros/helppackage.sas
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
*/
)/secure
/*** HELP END ***/
des = 'Macro to get help about SAS package, version 20240711. Run %helpPackage() for help info.'
des = 'Macro to get help about SAS package, version 20240927. Run %helpPackage() for help info.'
;
%if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then
%do;
Expand All @@ -43,7 +43,7 @@ des = 'Macro to get help about SAS package, version 20240711. Run %helpPackage()
%put ### This is short help information for the `helpPackage` macro #;
%put #-------------------------------------------------------------------------------#;
%put # #;
%put # Macro to get help about SAS packages, version `20240711` #;
%put # Macro to get help about SAS packages, version `20240927` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
Expand Down Expand Up @@ -120,14 +120,15 @@ des = 'Macro to get help about SAS package, version 20240711. Run %helpPackage()
%end;

/* local variables for options */
%local ls_tmp ps_tmp notes_tmp source_tmp msglevel_tmp;
%local ls_tmp ps_tmp notes_tmp source_tmp msglevel_tmp mautocomploc_tmp;
%let ls_tmp = %sysfunc(getoption(ls));
%let ps_tmp = %sysfunc(getoption(ps));
%let notes_tmp = %sysfunc(getoption(notes));
%let source_tmp = %sysfunc(getoption(source));
%let msglevel_tmp = %sysfunc(getoption(msglevel));
%let mautocomploc_tmp = %sysfunc(getoption(mautocomploc));

options NOnotes NOsource ls=MAX ps=MAX msglevel=N;
options NOnotes NOsource ls=MAX ps=MAX msglevel=N NOmautocomploc;

%local _PackageFileref_;
/* %let _PackageFileref_ = P%sysfunc(MD5(%lowcase(&packageName.)),hex7.); */
Expand Down Expand Up @@ -170,7 +171,8 @@ des = 'Macro to get help about SAS package, version 20240711. Run %helpPackage()
%else %put ERROR:[&sysmacroname] File "&path./&packageName..&zip." does not exist!;
filename &_PackageFileref_. clear;

options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp. msglevel = &msglevel_tmp.;
options ls = &ls_tmp. ps = &ps_tmp. &notes_tmp. &source_tmp.
msglevel = &msglevel_tmp. &mautocomploc_tmp.;

%ENDofhelpPackage:
%mend helpPackage;
Expand Down
98 changes: 89 additions & 9 deletions SPF/Macros/installpackage.sas
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*+installPackage+*/
/* Macros to install SAS packages, version 20240711 */
/* Macros to install SAS packages, version 20240927 */
/* A SAS package is a zip file containing a group of files
with SAS code (macros, functions, data steps generating
data, etc.) wrapped up together and %INCLUDEed by
Expand All @@ -18,11 +18,12 @@
, URLoptions = /* options for the `sourcePath` URLs */
, loadAddCnt=0 /* should the additional content be loaded?
default is 0 - means No, 1 means Yes */
, SFRCVN = /* name of a macro variable to store success-failure return code value */
)
/secure
minoperator
/*** HELP END ***/
des = 'Macro to install SAS package, version 20240711. Run %%installPackage() for help info.'
des = 'Macro to install SAS package, version 20240927. Run %%installPackage() for help info.'
;
%if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then
%do;
Expand All @@ -37,7 +38,7 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%put ### This is short help information for the `installPackage` macro #;
%put #--------------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to install SAS packages, version `20240711` #;
%put # Macro to install SAS packages, version `20240927` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
Expand Down Expand Up @@ -81,7 +82,7 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%put # - `version=` Indicates which historical version of a package to install. #;
%put # Historical version are available only if `mirror=0` is set. #;
%put # Default value is null which means "install the latest". #;
%put # When there are multiple packages to install version #;
%put # When there are multiple packages to install version variable #;
%put # is scan sequentially. #;
%put # #;
%put # - `replace=` With default value of `1` it causes existing package file #;
Expand All @@ -101,6 +102,11 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%put # directory in `<packageName>_AdditionalContent` folder. #;
%put # For other locations use `%nrstr(%%loadPackageAddCnt())` macro. #;
%put # #;
%put # - `SFRCVN=` *Optional.* Provides a NAME for a macro variable to store value of the #;
%put # *success-failure return code* of the installation process. Return value #;
%put # has the following form: `<number of successes>.<number of failures>` #;
%put # The macro variable is created as a *global* macro variable. #;
%put # #;
%put #--------------------------------------------------------------------------------------------#;
%put # #;
%put # Visit: `https://github.com/yabwon/SAS_PACKAGES/tree/main/SPF/Documentation` #;
Expand Down Expand Up @@ -149,7 +155,7 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%end;

/* local variables for options */
%local ls_tmp ps_tmp notes_tmp source_tmp stimer_tmp fullstimer_tmp msglevel_tmp;
%local ls_tmp ps_tmp notes_tmp source_tmp stimer_tmp fullstimer_tmp msglevel_tmp mautocomploc_tmp;

%let ls_tmp = %sysfunc(getoption(ls));
%let ps_tmp = %sysfunc(getoption(ps));
Expand All @@ -158,8 +164,9 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%let stimer_tmp = %sysfunc(getoption(stimer));
%let fullstimer_tmp = %sysfunc(getoption(fullstimer));
%let msglevel_tmp = %sysfunc(getoption(msglevel));
%let mautocomploc_tmp = %sysfunc(getoption(mautocomploc));

options NOnotes NOsource ls=MAX ps=MAX NOfullstimer NOstimer msglevel=N;
options NOnotes NOsource ls=MAX ps=MAX NOfullstimer NOstimer msglevel=N NOmautocomploc;

/*
Reference:
Expand Down Expand Up @@ -233,6 +240,10 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%put ;
%put INFO: Calling: &packagesNames.;

%Local PackagesInstalledSussess PackagesInstalledFail;
%Let PackagesInstalledSussess=;
%let PackagesInstalledFail=;

%do i = 1 %to %sysfunc(countw(&packagesNames., , S));
/*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*/
%local packageName packageSubDir vers versA versB;
Expand Down Expand Up @@ -266,7 +277,9 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%do;
%let SPFinitMirror = https://raw.githubusercontent.com/yabwon/SAS_PACKAGES/&vers./SPF/SPFinit.sas;
%end;

%if %superq(mirror) > 1 %then
%put %str( )Mirror %superq(mirror) does not support versioning.;

filename &in URL
"&SPFinitMirror."
recfm=N lrecl=1;
Expand All @@ -286,6 +299,12 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%let packageSubDir = %lowcase(&packageName.)/raw/&vers./;
%end;
%end;
%else
%do;
%if %superq(mirror) > 0 %then
%put %str( )Mirror %superq(mirror) does not support versioning.;
%end;

filename &in URL "&sourcePath.&packageSubDir.%lowcase(&packageName.).zip"
%if (%superq(URLuser) ne ) %then
%do;
Expand Down Expand Up @@ -360,6 +379,21 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
filename &in clear;
filename &out clear;

%if 0 = &installationRC. %then
%do;
%if %superq(vers)= %then
%Let PackagesInstalledSussess=&PackagesInstalledSussess. &packageName.;
%else
%Let PackagesInstalledSussess=&PackagesInstalledSussess. &packageName.(&vers.);
%end;
%else
%do;
%if %superq(vers)= %then
%Let PackagesInstalledFail=&PackagesInstalledFail. &packageName.;
%else
%let PackagesInstalledFail=&PackagesInstalledFail. &packageName.(&vers.);
%end;

%if 1 = &loadAddCnt.
AND 0 = &installationRC.
AND NOT (%upcase(&packageName.) in (SPFINIT SASPACKAGEFRAMEWORK SASPACKAGESFRAMEWORK))
Expand All @@ -375,14 +409,60 @@ des = 'Macro to install SAS package, version 20240711. Run %%installPackage() fo
%put *** %lowcase(&packageName.) end *******************************************;
/*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*/
%end;


%local sucsCount sucsCountWords;
%let sucsCount=0;
%if NOT(%superq(PackagesInstalledSussess)=) %then
%do;
%put %str( );
%let sucsCount=%sysfunc(countw(%superq(PackagesInstalledSussess),%str( )));
%if 1=&sucsCount. %then
%put INFO: Package %superq(PackagesInstalledSussess) installed.;
%else %if 1<&sucsCount. %then
%do;
%let sucsCountWords=%sysfunc(abs(&sucsCount.),words.);
%put INFO: Successfully installed &sucsCountWords. packages:;
%put %str( )&PackagesInstalledSussess.;
%end;
%end;

%local failCount failCountWords;
%let failCount=0;
%if NOT(%superq(PackagesInstalledFail)=) %then
%do;
%put %str( );
%let failCount=%sysfunc(countw(%superq(PackagesInstalledFail),%str( )));
%if 1=&failCount. %then
%put WARNING: Failed to install %superq(PackagesInstalledFail) package.;
%else %if 1<&failCount. %then
%do;
%let failCountWords=%sysfunc(abs(&failCount.),words.);
%put WARNING: Failed to install &failCountWords. packages:;
%put WARNING- &PackagesInstalledFail.;
%end;
%end;
%put %str( );

%if NOT(%superq(SFRCVN)=) %then
%do;
data _null_;
length SFRCVN $ 32;
SFRCVN = compress(symget('SFRCVN'),"_","KAD");
value = "&sucsCount..&failCount.";
put 'INFO: Success-Failure-Return-Code macroVariable Name is: ' SFRCVN
/ ' with value: ' value
/ ;
call symputX(SFRCVN, value, "G");
run;
%end;

%packagesListError:

options ls = &ls_tmp. ps = &ps_tmp.
&notes_tmp. &source_tmp.
&stimer_tmp. &fullstimer_tmp.
msglevel=&msglevel_tmp.;

msglevel=&msglevel_tmp. &mautocomploc_tmp.;
%ENDofinstallPackage:
%mend installPackage;

Expand Down
9 changes: 5 additions & 4 deletions SPF/Macros/listpackages.sas
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Macro to list SAS packages in packages folder.
Version 20240711
Version 20240927
A SAS package is a zip file containing a group
of SAS codes (macros, functions, data steps generating
Expand All @@ -21,8 +21,9 @@
*//*** HELP END ***/


%macro listPackages()/secure PARMBUFF
des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20240711.'
%macro listPackages()
/secure PARMBUFF
des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20240927.'
;
%if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then
%do;
Expand All @@ -37,7 +38,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE
%put ### This is short help information for the `listPackages` macro #;
%put #-----------------------------------------------------------------------------------------#;;
%put # #;
%put # Macro to list available SAS packages, version `20240711` #;
%put # Macro to list available SAS packages, version `20240927` #;
%put # #;
%put # A SAS package is a zip file containing a group #;
%put # of SAS codes (macros, functions, data steps generating #;
Expand Down
Loading

0 comments on commit 45127a0

Please sign in to comment.