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> | +-<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]> +-<sequential number>_<type [in lower case]>
| |
+-... +-...
@@ -642,7 +651,16 @@ data _null_;
do until(eof); do until(eof);
set &filesWithCodes. end = EOF nobs=NOBS; 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- ;';
put '%put NOTE- Element of type ' type 'from the file "' file +(-1) '" will be included;' /; put '%put NOTE- Element of type ' type 'from the file "' file +(-1) '" will be included;' /;
@@ -716,6 +734,47 @@ data _null_;
stop; stop;
run; 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 */ /* unloading package objects */
data _null_; data _null_;
/* break if no data */ /* break if no data */
@@ -908,7 +967,7 @@ data _null_;
put 'run; ' / ; 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 ***;';
put '%put NOTE- ;'; put '%put NOTE- ;';
@@ -954,16 +1013,14 @@ data _null_;
put ' end; '; put ' end; ';
put ' else stop; '; put ' else stop; ';
%if %bquote(&packageReqPackages.) ne %then
%do; put ' put ; put " Package contains: "; ';
length packageReqPackages $ 32767; EOFDS = 0;
packageReqPackages = symget('packageReqPackages'); do until(EOFDS);
put ' length req $ 64; '; /* content is created during package creation */
put ' put ; put " Required SAS Packages: "; '; set &filesWithCodes. end = EOFDS nobs = NOBS curobs = CUROBS;
put ' do req = ' / packageReqPackages / ' ; '; put 'put @5 "' CUROBS +(-1) ')" @10 "' type '" @21 "' fileshort '";';
put ' put " " req; '; end;
put ' end ; ';
%end;
%if %bquote(&packageRequired.) ne %then %if %bquote(&packageRequired.) ne %then
%do; %do;
@@ -972,7 +1029,18 @@ data _null_;
put ' length req $ 64; '; put ' length req $ 64; ';
put ' put ; put " Required SAS Components: "; '; put ' put ; put " Required SAS Components: "; ';
put ' do req = ' / packageRequired / ' ; '; 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 ; '; put ' end ; ';
%end; %end;
@@ -1007,12 +1075,12 @@ data _null_;
EOFDS = 0; EOFDS = 0;
do until(EOFDS); do until(EOFDS);
/* content is created during package creation */ /* content is created during package creation */
set &filesWithCodes. end = EOFDS nobs = NOBS; set &filesWithCodes. end = EOFDS;
select; select;
when (upcase(type) = "DATA") fileshort2 = fileshort; when (upcase(type) in ("DATA" "LAZYDATA")) fileshort2 = fileshort;
when (upcase(type) = "MACRO") fileshort2 = cats('%',fileshort,'()'); when (upcase(type) = "MACRO") fileshort2 = cats('%',fileshort,'()');
when (upcase(type) = "FUNCTION") fileshort2 = cats(fileshort,'()'); when (upcase(type) = "FUNCTION") fileshort2 = cats(fileshort,'()');
when (upcase(type) = "FORMAT") fileshort2 = cats('$',fileshort); when (upcase(type) = "FORMAT") fileshort2 = cats('$',fileshort);
otherwise fileshort2 = fileshort; otherwise fileshort2 = fileshort;
end; end;
strX = catx('/', folder, order, type, file, fileshort, fileshort2); 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 */ null by default */
, requiredVersion = . /* option to test if loaded package , requiredVersion = . /* option to test if loaded package
is provided in required version */ 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 ***/ /*** HELP END ***/
%local ls_tmp ps_tmp notes_tmp source_tmp fullstimer_tmp stimer_tmp; %local ls_tmp ps_tmp notes_tmp source_tmp fullstimer_tmp stimer_tmp;
%let ls_tmp = %sysfunc(getoption(ls)); %let ls_tmp = %sysfunc(getoption(ls));
@@ -100,7 +105,15 @@ TODO:
%if %bquote(&packageEncoding.) NE %then &packageEncoding. ; %if %bquote(&packageEncoding.) NE %then &packageEncoding. ;
%else utf8 ; %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; %end;
%else %put ERROR:[&sysmacroname] File "&path./&packageName..zip" does not exist; %else %put ERROR:[&sysmacroname] File "&path./&packageName..zip" does not exist;
filename &_PackageFileref_. clear; filename &_PackageFileref_. clear;