mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2026-01-10 08:20:06 +00:00
lazyData loading added
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user