lazyData loading added

This commit is contained in:
yabwon
2019-11-16 21:53:24 +01:00
parent 59f7c032d2
commit 2dc8e600e2
2 changed files with 102 additions and 21 deletions

View File

@@ -265,6 +265,15 @@ DESCRIPTION END:
| |
| +-<no file, in this case folder may be skipped>
|
|
+-008_lazydata [one file one dataset]
| |
| +-klm.sas [a file with a code creating dataset klm in library work
| it will be created only if user request it by using:
| %loadPackage(packagename, lazyData=klm)
| multiple elements separated by space are allowed
| an asterisk(*) means "load all data"]
|
+-<sequential number>_<type [in lower case]>
|
+-...
@@ -642,7 +651,16 @@ data _null_;
do until(eof);
set &filesWithCodes. end = EOF nobs=NOBS;
if (upcase(type)=:'CLEAN') then continue; /* cleaning files are only included in unload.sas */
if (upcase(type) in: ('CLEAN' 'LAZYDATA')) then continue; /* cleaning files are only included in unload.sas */
/* lazy data are only loaded on demand
%loadPackage(packagename, lazyData=set1 set2 set3)
*/
/* test for supported types */
if not (upcase(type) in: ('LIBNAME' 'MACRO' 'DATA' 'FUNCTION' 'FORMAT' 'EXEC' 'CLEAN' 'LAZYDATA')) then
do;
putlog 'WARNING: Type ' type 'is not yet supported.';
continue;
end;
put '%put NOTE- ;';
put '%put NOTE- Element of type ' type 'from the file "' file +(-1) '" will be included;' /;
@@ -716,6 +734,47 @@ data _null_;
stop;
run;
/* to load lazydata */
data _null_;
if NOBS = 0 then stop;
file &zipReferrence.(lazydata.sas) lrecl=32767;
put "filename &_PackageFileref_. list;" /;
put ' %put NOTE- ;';
put ' %put NOTE: ' @; put "Lazy data for package &packageName., version &packageVersion., license &packageLicense.; ";
put ' %put NOTE: ' @; put "*** &packageTitle. ***; ";
put ' %put NOTE- ' @; put "Generated: %sysfunc(datetime(), datetime21.); ";
put ' %put NOTE- ' @; put "Author(s): &packageAuthor.; ";
put ' %put NOTE- ' @; put "Maintainer(s): &packageMaintainer.; ";
put ' %put NOTE- ;';
put ' %put NOTE- Write %nrstr(%%)helpPackage(' "&packageName." ') for the description;';
put ' %put NOTE- ;';
put ' %put NOTE- *** START ***; ' /;
/*put '%include ' " &_PackageFileref_.(packagemetadata.sas) / nosource2; " /;*/ /* <- copied also to loadPackage macro */
put 'data _null_;';
put ' length lazyData $ 32767; lazyData = lowcase(symget("lazyData"));';
do until(eof);
set &filesWithCodes.(where=( upcase(type) =: 'LAZYDATA' )) end = EOF nobs=NOBS;
put 'if lazyData="*" OR findw(lazyData, "' fileshort +(-1) '") then';
put 'do;';
put ' put "NOTE- Dataset ' fileshort 'from the file ""' file +(-1) '"" will be loaded";';
put ' call execute(''%nrstr(%include' " &_PackageFileref_.(_" folder +(-1) "." file +(-1) ') / nosource2;)'');';
put 'end;';
end;
put 'run;';
put '%put NOTE- ;';
put '%put NOTE: '"Lazy data for package &packageName., version &packageVersion., license &packageLicense.;";
put '%put NOTE- *** END ***;' /;
put "/* lazydata.sas end */" /;
stop;
run;
/* unloading package objects */
data _null_;
/* break if no data */
@@ -908,7 +967,7 @@ data _null_;
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- ;';
@@ -954,16 +1013,14 @@ data _null_;
put ' end; ';
put ' else stop; ';
%if %bquote(&packageReqPackages.) ne %then
%do;
length packageReqPackages $ 32767;
packageReqPackages = symget('packageReqPackages');
put ' length req $ 64; ';
put ' put ; put " Required SAS Packages: "; ';
put ' do req = ' / packageReqPackages / ' ; ';
put ' put " " req; ';
put ' end ; ';
%end;
put ' put ; put " Package contains: "; ';
EOFDS = 0;
do until(EOFDS);
/* content is created during package creation */
set &filesWithCodes. end = EOFDS nobs = NOBS curobs = CUROBS;
put 'put @5 "' CUROBS +(-1) ')" @10 "' type '" @21 "' fileshort '";';
end;
%if %bquote(&packageRequired.) ne %then
%do;
@@ -972,7 +1029,18 @@ data _null_;
put ' length req $ 64; ';
put ' put ; put " Required SAS Components: "; ';
put ' do req = ' / packageRequired / ' ; ';
put ' put " " req; ';
put ' put @5 req; ';
put ' end ; ';
%end;
%if %bquote(&packageReqPackages.) ne %then
%do;
length packageReqPackages $ 32767;
packageReqPackages = symget('packageReqPackages');
put ' length req $ 64; ';
put ' put ; put " Required SAS Packages: "; ';
put ' do req = ' / packageReqPackages / ' ; ';
put ' put @5 req; ';
put ' end ; ';
%end;
@@ -1007,12 +1075,12 @@ data _null_;
EOFDS = 0;
do until(EOFDS);
/* content is created during package creation */
set &filesWithCodes. end = EOFDS nobs = NOBS;
set &filesWithCodes. end = EOFDS;
select;
when (upcase(type) = "DATA") fileshort2 = fileshort;
when (upcase(type) = "MACRO") fileshort2 = cats('%',fileshort,'()');
when (upcase(type) = "FUNCTION") fileshort2 = cats(fileshort,'()');
when (upcase(type) = "FORMAT") fileshort2 = cats('$',fileshort);
when (upcase(type) in ("DATA" "LAZYDATA")) fileshort2 = fileshort;
when (upcase(type) = "MACRO") fileshort2 = cats('%',fileshort,'()');
when (upcase(type) = "FUNCTION") fileshort2 = cats(fileshort,'()');
when (upcase(type) = "FORMAT") fileshort2 = cats('$',fileshort);
otherwise fileshort2 = fileshort;
end;
strX = catx('/', folder, order, type, file, fileshort, fileshort2);

View File

@@ -1,4 +1,4 @@
/*** HELP START ***/
/*** HELP START ***/
/**############################################################################**/
/* */
@@ -63,7 +63,12 @@ TODO:
null by default */
, requiredVersion = . /* option to test if loaded package
is provided in required version */
)/secure;
, lazyData = /* a list of names of a lazy datasets
to be loaded, if not null then
datasets from the list are loaded
instead of a package, asterisk
means "load all datasets" */
)/secure minoperator;
/*** HELP END ***/
%local ls_tmp ps_tmp notes_tmp source_tmp fullstimer_tmp stimer_tmp;
%let ls_tmp = %sysfunc(getoption(ls));
@@ -100,7 +105,15 @@ TODO:
%if %bquote(&packageEncoding.) NE %then &packageEncoding. ;
%else utf8 ;
;
%include &_PackageFileref_.(load.sas) / &source2.;
%if %bquote(&lazyData.) = %then
%do;
%include &_PackageFileref_.(load.sas) / &source2.;
%end;
%else
%do;
%include &_PackageFileref_.(lazydata.sas) / &source2.;
%end;
%end;
%else %put ERROR:[&sysmacroname] File "&path./&packageName..zip" does not exist;
filename &_PackageFileref_. clear;