mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2026-01-09 16:00:06 +00:00
SAS Packages Framework, ver. 20221022
**SAS Packages Framework**, ver. `20221022` In the `%generatePackage()` macro additional quality checks for files of EXEC and CLEAN types were added. Each EXEC file should have a CLEAN file counterpart and vice versa. - If the number of EXECs and CLEANs differs but both are positive macro issues a Warning. - If EXECs are positive but CLEANs are zero (or other way around) macro issues an Error! Documentation updated.
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
default value 1 means "delete tests work" */
|
||||
)/secure minoperator
|
||||
/*** HELP END ***/
|
||||
des = 'Macro to generate SAS packages, version 20221002. Run %generatePackage() for help info.'
|
||||
des = 'Macro to generate SAS packages, version 20221022. Run %generatePackage() for help info.'
|
||||
;
|
||||
%if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then
|
||||
%do;
|
||||
@@ -38,7 +38,7 @@ des = 'Macro to generate SAS packages, version 20221002. Run %generatePackage()
|
||||
%put ### This is short help information for the `generatePackage` macro #;
|
||||
%put #-------------------------------------------------------------------------------#;
|
||||
%put # #;
|
||||
%put # Macro to generate SAS packages, version `20221002` #;
|
||||
%put # Macro to generate SAS packages, version `20221022` #;
|
||||
%put # #;
|
||||
%put # A SAS package is a zip file containing a group #;
|
||||
%put # of SAS codes (macros, functions, data steps generating #;
|
||||
@@ -572,6 +572,76 @@ options NOnotes NOsource;
|
||||
proc sort data = &filesWithCodes.;
|
||||
by order type file;
|
||||
run;
|
||||
|
||||
/* quality check for EXEC and CLEAN types */
|
||||
data _null_;
|
||||
set &filesWithCodes. (where=(upcase(type) in ('EXEC' 'CLEAN'))) end=EOF;
|
||||
|
||||
if _N_ = 1 then
|
||||
do;
|
||||
declare hash EXEC(); /* store EXECs */
|
||||
EXEC.defineKey('file');
|
||||
EXEC.defineData('ne');
|
||||
EXEC.defineDone();
|
||||
declare hash CLEAN(); /* store CLEANs */
|
||||
CLEAN.defineKey('file');
|
||||
CLEAN.defineData('nc');
|
||||
CLEAN.defineDone();
|
||||
|
||||
declare hash F(ordered:"A");
|
||||
F.defineKey('file');
|
||||
F.defineData('file');
|
||||
F.defineDone();
|
||||
declare hiter IF("F");
|
||||
end;
|
||||
|
||||
F.replace();
|
||||
if upcase(type) = 'EXEC' then
|
||||
do;
|
||||
e + 1;
|
||||
if EXEC.find() then EXEC.add(key:file,data:1);
|
||||
else EXEC.replace(key:file,data:ne+1);
|
||||
end;
|
||||
|
||||
if upcase(type) = 'CLEAN' then
|
||||
do;
|
||||
c + 1;
|
||||
if CLEAN.find() then CLEAN.add(key:file,data:1);
|
||||
else CLEAN.replace(key:file,data:nc+1);
|
||||
end;
|
||||
|
||||
if EOF then
|
||||
do;
|
||||
/* if number of EXECs and CLEANs differs but both are positive issue a Warning */
|
||||
if (0 < e < c) or (0 < c < e) or not(EXEC.NUM_ITEMS = CLEAN.NUM_ITEMS = F.NUM_ITEMS) then
|
||||
do;
|
||||
put "WARNING: Number of EXEC type and CLEAN type files differs!" /
|
||||
"WARNING- Each EXEC file should have CLEAN file counterpart and vice versa." /
|
||||
'WARNING- Please create appropriate files and make your package a "role model".' /
|
||||
'WARNING- ' /
|
||||
'WARNING- The list of differences:';
|
||||
do while(IF.next()=0);
|
||||
ne = 0;
|
||||
nc = 0;
|
||||
df = EXEC.find();
|
||||
df = CLEAN.find();
|
||||
df = abs(ne - nc);
|
||||
put "WARNING- File " file char36. "EXEC: " ne 3. +1 "CLEAN: " nc 3. +1 "diff: " df 3.;
|
||||
end;
|
||||
put "WARNING- ";
|
||||
end;
|
||||
/* if EXECs are positive but CLEANs are zero (or other way around) issue an Error */
|
||||
if (0 = e < c) or (0 = c < e) then
|
||||
do;
|
||||
put "ERROR: There are " e "EXECs files and " c "CLEANs files!" /
|
||||
"ERROR- Each EXEC file should have CLEAN file counterpart and vice versa." /
|
||||
'ERROR- Please create appropriate files and make your package a "role model".' /
|
||||
'ERROR: Aborting package generation!' ;
|
||||
abort;
|
||||
end;
|
||||
end;
|
||||
run;
|
||||
|
||||
/*
|
||||
proc contents data = &filesWithCodes.;
|
||||
run;
|
||||
@@ -1605,7 +1675,7 @@ data _null_;
|
||||
put ' end ; ';
|
||||
%end;
|
||||
|
||||
put 'put "***"; put "* SAS package generated by generatePackage, version 20221002 *"; put "***";';
|
||||
put 'put "***"; put "* SAS package generated by generatePackage, version 20221022 *"; put "***";';
|
||||
|
||||
put 'run; ' /;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user