mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2026-01-10 08:20:06 +00:00
updates
SYSloadedPackages and SYSloadedPackages, PDF updated
This commit is contained in:
Binary file not shown.
@@ -13,7 +13,7 @@ License: MIT :/*required, not null, values:
|
|||||||
Encoding: UTF8 :/*required, not null, values: UTF8, WLATIN1, LATIN2, etc. */
|
Encoding: UTF8 :/*required, not null, values: UTF8, WLATIN1, LATIN2, etc. */
|
||||||
|
|
||||||
Required: "Base SAS Software" :/*optional, COMMA separated, QUOTED list, names of required SAS products, values must be like from proc setinit;run; output */
|
Required: "Base SAS Software" :/*optional, COMMA separated, QUOTED list, names of required SAS products, values must be like from proc setinit;run; output */
|
||||||
ReqPackages: "macroArray (0.1)", "DFA (0.1)" :/*optional, COMMA separated, QUOTED list, names of required packages */
|
ReqPackages: "macroArray (0.1)", "DFA (0.1)" :/*optional, COMMA separated, QUOTED list, names of required packages */
|
||||||
|
|
||||||
/* **DESCRIPTION** */
|
/* **DESCRIPTION** */
|
||||||
/* All the text below will be used in help */
|
/* All the text below will be used in help */
|
||||||
|
|||||||
Binary file not shown.
@@ -66,14 +66,15 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256;
|
|||||||
%do;
|
%do;
|
||||||
%put NOTE: Creating package%str(%')s metadata;
|
%put NOTE: Creating package%str(%')s metadata;
|
||||||
|
|
||||||
%local packageName /* name of the package, required */
|
%local packageName /* name of the package, required */
|
||||||
packageVersion /* version of the package, required */
|
packageVersion /* version of the package, required */
|
||||||
packageTitle /* title of the package, required*/
|
packageTitle /* title of the package, required*/
|
||||||
packageAuthor /* required */
|
packageAuthor /* required */
|
||||||
packageMaintainer /* required */
|
packageMaintainer /* required */
|
||||||
packageEncoding /* required */
|
packageEncoding /* required */
|
||||||
packageLicense /* required */
|
packageLicense /* required */
|
||||||
packageRequired /* optional */
|
packageRequired /* optional */
|
||||||
|
packageReqPackages /* optional */
|
||||||
;
|
;
|
||||||
data _null_;
|
data _null_;
|
||||||
infile &_DESCR_.;
|
infile &_DESCR_.;
|
||||||
@@ -156,7 +157,7 @@ data _null_;
|
|||||||
version = input("&packageVersion.", ?? best32.);
|
version = input("&packageVersion.", ?? best32.);
|
||||||
if not (version > 0) then
|
if not (version > 0) then
|
||||||
do;
|
do;
|
||||||
put 'ERROR: Packave version should be a positive NUMBER.';
|
put 'ERROR: Package version should be a positive NUMBER.';
|
||||||
put 'ERROR- Current value is: ' "&packageVersion.";
|
put 'ERROR- Current value is: ' "&packageVersion.";
|
||||||
put 'ERROR- Try something small, e.g. 0.1';
|
put 'ERROR- Try something small, e.g. 0.1';
|
||||||
put;
|
put;
|
||||||
@@ -193,6 +194,9 @@ Maintainer: Firstname Lastname (xxxxxx@yyyyy.com)
|
|||||||
License: MIT
|
License: MIT
|
||||||
Encoding: UTF8
|
Encoding: UTF8
|
||||||
|
|
||||||
|
Required: "Base SAS Software" :%*optional, COMMA separated, QUOTED list, names of required SAS products, values must be like from proc setinit;run; output *;
|
||||||
|
ReqPackages: "macroArray (0.1)", "DFA (0.1)" :%*optional, COMMA separated, QUOTED list, names of required packages *;
|
||||||
|
|
||||||
>> **DESCRIPTION** <<
|
>> **DESCRIPTION** <<
|
||||||
>> All the text below will be used in help <<
|
>> All the text below will be used in help <<
|
||||||
DESCRIPTION START:
|
DESCRIPTION START:
|
||||||
@@ -338,7 +342,7 @@ proc print data = &filesWithCodes.(drop=base);
|
|||||||
run;
|
run;
|
||||||
title;
|
title;
|
||||||
|
|
||||||
/* packages's description */
|
/* packages description */
|
||||||
data _null_;
|
data _null_;
|
||||||
infile &_DESCR_.;
|
infile &_DESCR_.;
|
||||||
file &zipReferrence.(description.sas);
|
file &zipReferrence.(description.sas);
|
||||||
@@ -346,7 +350,7 @@ data _null_;
|
|||||||
put _INFILE_;
|
put _INFILE_;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* package's license */
|
/* package license */
|
||||||
%if %sysfunc(fexist(&_LIC_.)) %then
|
%if %sysfunc(fexist(&_LIC_.)) %then
|
||||||
%do;
|
%do;
|
||||||
data _null_;
|
data _null_;
|
||||||
@@ -386,7 +390,7 @@ run;
|
|||||||
run;
|
run;
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
/* package's metadata */
|
/* package metadata */
|
||||||
data _null_;
|
data _null_;
|
||||||
if 0 then set &filesWithCodes. nobs=NOBS;
|
if 0 then set &filesWithCodes. nobs=NOBS;
|
||||||
if NOBS = 0 then
|
if NOBS = 0 then
|
||||||
@@ -418,7 +422,7 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* loading package's files */
|
/* loading package files */
|
||||||
data _null_;
|
data _null_;
|
||||||
if NOBS = 0 then stop;
|
if NOBS = 0 then stop;
|
||||||
|
|
||||||
@@ -512,16 +516,52 @@ data _null_;
|
|||||||
|
|
||||||
%if %bquote(&packageReqPackages.) ne %then
|
%if %bquote(&packageReqPackages.) ne %then
|
||||||
%do;
|
%do;
|
||||||
/*
|
put ' data _null_ ; ';
|
||||||
put ' data _null_ ; ';
|
put ' length req name $ 64 SYSloadedPackages $ 32767; ';
|
||||||
put ' length req $ 64 ; ';
|
length packageReqPackages $ 32767;
|
||||||
length packageReqPackages $ 32767;
|
|
||||||
packageReqPackages = lowcase(symget('packageReqPackages'));
|
packageReqPackages = lowcase(symget('packageReqPackages'));
|
||||||
put ' do req = ' / packageReqPackages / ' ; ';
|
put ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then ';
|
||||||
put ' call execute(''%nrstr(%loadPackage('' || scan(req,1) || ''));'') ; ';
|
put ' do; ';
|
||||||
put ' end ; ';
|
put ' do until(EOF); ';
|
||||||
put 'run; ';
|
put ' set sashelp.vmacro(where=(scope="GLOBAL" and name="SYSLOADEDPACKAGES")) end=EOF; ';
|
||||||
*/
|
put ' substr(SYSloadedPackages, 1+offset, 200) = value; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' SYSloadedPackages = lowcase(SYSloadedPackages); ';
|
||||||
|
|
||||||
|
put ' declare hash LP(); ';
|
||||||
|
put ' LP.defineKey("name"); ';
|
||||||
|
put ' LP.defineDone(); ';
|
||||||
|
put ' do _N_ = 1 to countw(SYSloadedPackages); ';
|
||||||
|
put ' name = scan(SYSloadedPackages, _N_); ';
|
||||||
|
put ' _RC_ = LP.add(); ';
|
||||||
|
put ' end; ';
|
||||||
|
|
||||||
|
put ' missingPackagr = 0; ';
|
||||||
|
put ' do req = ' / packageReqPackages / ' ; ';
|
||||||
|
put ' name = lowcase(strip(scan(req, 1, " "))); ';
|
||||||
|
put ' vers = lowcase(compress(scan(req,-1, " "), ".", "KD")); ';
|
||||||
|
put ' if LP.check() ne 0 then ';
|
||||||
|
put ' do; ';
|
||||||
|
put ' missingPackagr = 1; ';
|
||||||
|
put ' put "ERROR: SAS package " req "is missing! " ; ';
|
||||||
|
put ' put ''ERROR- Try %loadPackage('' name ", requiredVersion = " vers ") to load it." ;';
|
||||||
|
put ' end ; ';
|
||||||
|
put ' end ; ';
|
||||||
|
put ' if missingPackagr then call symputX("packageRequiredErrors", 1, "L"); ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' else ';
|
||||||
|
put ' do; ';
|
||||||
|
put ' put "ERROR: No package loaded!"; ';
|
||||||
|
put ' call symputX("packageRequiredErrors", 1, "L"); ';
|
||||||
|
put ' do req = ' / packageReqPackages / ' ; ';
|
||||||
|
put ' name = lowcase(strip(scan(req, 1, " "))); ';
|
||||||
|
put ' vers = lowcase(compress(scan(req,-1, " "), ".", "KD")); ';
|
||||||
|
put ' put "ERROR: SAS package " req "is missing! " ; ';
|
||||||
|
put ' put ''ERROR- Try %loadPackage('' name ", requiredVersion = " vers ") to load it." ; ';
|
||||||
|
put ' end ; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' stop; ';
|
||||||
|
put 'run; ';
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
%if (%bquote(&packageRequired.) ne )
|
%if (%bquote(&packageRequired.) ne )
|
||||||
@@ -533,6 +573,7 @@ data _null_;
|
|||||||
put ' do; ';
|
put ' do; ';
|
||||||
put ' put "ERROR: Loading package &packageName. will be aborted!";';
|
put ' put "ERROR: Loading package &packageName. will be aborted!";';
|
||||||
put ' put "ERROR- Required SAS components are missing."; ';
|
put ' put "ERROR- Required SAS components are missing."; ';
|
||||||
|
put ' put "ERROR- *** STOP ***"; ';
|
||||||
put ' ABORT; ';
|
put ' ABORT; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -580,6 +621,33 @@ data _null_;
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/* update SYSloadedPackages global macrovariable */
|
||||||
|
put ' data _null_ ; ';
|
||||||
|
put ' length SYSloadedPackages $ 32767; ';
|
||||||
|
put ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then ';
|
||||||
|
put ' do; ';
|
||||||
|
put ' do until(EOF); ';
|
||||||
|
put ' set sashelp.vmacro(where=(scope="GLOBAL" and name="SYSLOADEDPACKAGES")) end=EOF; ';
|
||||||
|
put ' substr(SYSloadedPackages, 1+offset, 200) = value; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' SYSloadedPackages = cats("#", translate(strip(SYSloadedPackages), "#", " "), "#"); ';
|
||||||
|
|
||||||
|
put " if INDEX(lowcase(SYSloadedPackages), '#%lowcase(&packageName.)#') = 0 then ";
|
||||||
|
put ' do; ';
|
||||||
|
put " SYSloadedPackages = catx('#', SYSloadedPackages, '&packageName.'); ";
|
||||||
|
put ' SYSloadedPackages = compbl(translate(SYSloadedPackages, " ", "#")); ';
|
||||||
|
put ' call symputX("SYSloadedPackages", SYSloadedPackages, "G"); ';
|
||||||
|
put ' put "NOTE: " SYSloadedPackages = ; ';
|
||||||
|
put ' end ; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' else ';
|
||||||
|
put ' do; ';
|
||||||
|
put " call symputX('SYSloadedPackages', '&packageName.', 'G'); ";
|
||||||
|
put " put 'NOTE: SYSloadedPackages = &packageName.'; ";
|
||||||
|
put ' end; ';
|
||||||
|
put ' stop; ';
|
||||||
|
put 'run; ' / ;
|
||||||
|
|
||||||
put '%put NOTE- ;';
|
put '%put NOTE- ;';
|
||||||
put '%put NOTE: '"Loading package &packageName., version &packageVersion., license &packageLicense.;";
|
put '%put NOTE: '"Loading package &packageName., version &packageVersion., license &packageLicense.;";
|
||||||
put '%put NOTE- *** END ***;' /;
|
put '%put NOTE- *** END ***;' /;
|
||||||
@@ -587,7 +655,7 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* unloading package's objects */
|
/* unloading package objects */
|
||||||
data _null_;
|
data _null_;
|
||||||
/* break if no data */
|
/* break if no data */
|
||||||
if NOBS = 0 then stop;
|
if NOBS = 0 then stop;
|
||||||
@@ -738,6 +806,29 @@ data _null_;
|
|||||||
put 'libname ' fileshort ' clear;';
|
put 'libname ' fileshort ' clear;';
|
||||||
end;
|
end;
|
||||||
put "run;" /;
|
put "run;" /;
|
||||||
|
|
||||||
|
/* update SYSloadedPackages global macrovariable */
|
||||||
|
put ' data _null_ ; ';
|
||||||
|
put ' length SYSloadedPackages $ 32767; ';
|
||||||
|
put ' if SYMEXIST("SYSloadedPackages") = 1 and SYMGLOBL("SYSloadedPackages") = 1 then ';
|
||||||
|
put ' do; ';
|
||||||
|
put ' do until(EOF); ';
|
||||||
|
put ' set sashelp.vmacro(where=(scope="GLOBAL" and name="SYSLOADEDPACKAGES")) end=EOF; ';
|
||||||
|
put ' substr(SYSloadedPackages, 1+offset, 200) = value; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' SYSloadedPackages = cats("#", translate(strip(SYSloadedPackages), "#", " "), "#"); ';
|
||||||
|
|
||||||
|
put " if INDEX(lowcase(SYSloadedPackages), '#%lowcase(&packageName.)#') > 0 then ";
|
||||||
|
put ' do; ';
|
||||||
|
put " SYSloadedPackages = tranwrd(SYSloadedPackages, '#&packageName.#', '##'); ";
|
||||||
|
put ' SYSloadedPackages = compbl(translate(SYSloadedPackages, " ", "#")); ';
|
||||||
|
put ' call symputX("SYSloadedPackages", SYSloadedPackages, "G"); ';
|
||||||
|
put ' put "NOTE: " SYSloadedPackages = ; ';
|
||||||
|
put ' end ; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' stop; ';
|
||||||
|
put 'run; ' / ;
|
||||||
|
|
||||||
|
|
||||||
put '%put NOTE: '"Unloading package &packageName., version &packageVersion., license &packageLicense.;";
|
put '%put NOTE: '"Unloading package &packageName., version &packageVersion., license &packageLicense.;";
|
||||||
put '%put NOTE- *** END ***;';
|
put '%put NOTE- *** END ***;';
|
||||||
@@ -747,7 +838,7 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* package's help */
|
/* package help */
|
||||||
data _null_;
|
data _null_;
|
||||||
/* break if no data */
|
/* break if no data */
|
||||||
if NOBS = 0 then stop;
|
if NOBS = 0 then stop;
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ TODO:
|
|||||||
, path = %sysfunc(pathname(packages)) /* location of a package, by default it looks for location of "packages" library */
|
, path = %sysfunc(pathname(packages)) /* location of a package, by default it looks for location of "packages" library */
|
||||||
, options = %str(LOWCASE_MEMNAME) /* possible options for ZIP filename */
|
, options = %str(LOWCASE_MEMNAME) /* possible options for ZIP filename */
|
||||||
, source2 = /*source2*/ /* option to print out details, null by default */
|
, source2 = /*source2*/ /* option to print out details, null by default */
|
||||||
|
, requiredVersion = . /* option to test if loaded package is provided in required version */
|
||||||
)/secure;
|
)/secure;
|
||||||
/*** HELP END ***/
|
/*** HELP END ***/
|
||||||
%local ls_tmp ps_tmp notes_tmp source_tmp;
|
%local ls_tmp ps_tmp notes_tmp source_tmp;
|
||||||
@@ -72,6 +73,15 @@ TODO:
|
|||||||
%do;
|
%do;
|
||||||
%include package(packagemetadata.sas) / &source2.;
|
%include package(packagemetadata.sas) / &source2.;
|
||||||
filename package clear;
|
filename package clear;
|
||||||
|
|
||||||
|
/* test if required version of package is "good enough" */
|
||||||
|
%if %sysevalf(&requiredVersion. > &packageVersion.) %then
|
||||||
|
%do;
|
||||||
|
%put ERROR: Required version is &requiredVersion.;
|
||||||
|
%put ERROR- Provided version is &packageVersion.;
|
||||||
|
%ABORT;
|
||||||
|
%end;
|
||||||
|
|
||||||
options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.;
|
options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.;
|
||||||
filename package ZIP
|
filename package ZIP
|
||||||
"&path./%lowcase(&packageName.).zip" %unquote(&options.)
|
"&path./%lowcase(&packageName.).zip" %unquote(&options.)
|
||||||
|
|||||||
BIN
macroarray.zip
BIN
macroarray.zip
Binary file not shown.
BIN
sqlinds.zip
BIN
sqlinds.zip
Binary file not shown.
Reference in New Issue
Block a user