diff --git a/generatePackage.sas b/generatePackage.sas index 0793a45..92e8ab5 100644 --- a/generatePackage.sas +++ b/generatePackage.sas @@ -265,6 +265,15 @@ DESCRIPTION END: | | | +- | + | + +-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"] + | +-_ | +-... @@ -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); diff --git a/loadpackage.sas b/loadpackage.sas index 71ff7dc..28ceb22 100644 --- a/loadpackage.sas +++ b/loadpackage.sas @@ -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;