1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-07 01:20:05 +00:00

feat: enabling informats to be ingested with the mp_loadformat macro

This commit is contained in:
Allan
2023-06-20 00:21:19 +01:00
parent 146610b5a7
commit dcb7958950
4 changed files with 171 additions and 21 deletions

View File

@@ -1,9 +1,11 @@
/**
@file
@brief Testing mp_loadformat.sas macro
@details first test regular formats, then informats
<h4> SAS Macros </h4>
@li mddl_dc_difftable.sas
@li mp_aligndecimal.sas
@li mp_loadformat.sas
@li mp_assert.sas
@li mp_assertscope.sas
@@ -15,8 +17,10 @@ libname perm (work);
%mddl_dc_difftable(libds=perm.audit)
/* set up regular formats */
data work.loadfmts;
length fmtname $32;
/* matching start / end lengths (to baseds) are important */
length fmtname $32 start end $10000;
eexcl='Y';
type='N';
do i=1 to 100;
@@ -24,7 +28,9 @@ data work.loadfmts;
do j=1 to 100;
start=cats(j);
end=cats(j+1);
label= cats('Dummy ',start);
%mp_aligndecimal(start,width=16)
%mp_aligndecimal(end,width=16)
label= cats('Numeric Format ',start);
output;
end;
end;
@@ -42,6 +48,8 @@ data work.stagedata;
else if _n_<350 then do;
start=cats(_n_);
end=cats(_n_+1);
%mp_aligndecimal(start,width=16)
%mp_aligndecimal(end,width=16)
label='newval'!!cats(_N_);
end;
else stop;
@@ -91,3 +99,118 @@ run;
desc=Test 1 - diffs were found,
outds=work.test_results
)
/* set up a mix of formats */
data work.loadfmts2;
length fmtname $32 start end $10000;
eexcl='Y';
type='J';
do i=1 to 3;
fmtname=cats('SASJS_CI_',i,'X');
do j=1 to 4;
start=cats(j);
end=start;
label= cats('Char INFORMAT ',start);
output;
end;
end;
type='I';
do i=1 to 3;
fmtname=cats('SASJS_NI_',i,'X');
do j=1 to 4;
start=cats(j);
end=cats(j+1);
%mp_aligndecimal(start,width=16)
%mp_aligndecimal(end,width=16)
label= cats(ranuni(0));
output;
end;
end;
type='N';
do i=1 to 3;
fmtname=cats('SASJS_NF_',i,'X');
do j=1 to 4;
start=cats(j);
end=cats(j+1);
%mp_aligndecimal(start,width=16)
%mp_aligndecimal(end,width=16)
label= cats('Numeric Format ',start);
output;
end;
end;
type='C';
do i=1 to 3;
fmtname=cats('SASJS_CF_',i,'X');
do j=1 to 4;
start=cats(j);
end=start;
label= cats('Char Format ',start);
output;
end;
end;
drop i j;
run;
proc format cntlin=work.loadfmts2 library=perm.testcat2;
run;
/* make some test data */
data work.stagedata2;
set work.loadfmts2;
where type in ('I','J');
eexcl='Y';
if type='I' then do;
i+1;
if i<3 then deleteme='Yes';
else if i<7 then label= cats(ranuni(0)*100);
else if i<12 then do;
/* new values */
z=ranuni(0)*1000000;
start=cats(z);
end=cats(z+1);
%mp_aligndecimal(start,width=16)
%mp_aligndecimal(end,width=16)
label= cats(ranuni(0)*100);
end;
if i<12 then output;
end;
else do;
j+1;
if j<3 then deleteme='Yes';
else if j<7 then label= cats(ranuni(0)*100);
else if j<12 then do;
start= cats("NEWVAL",start);
end=start;
label= "NEWVAL "||cats(ranuni(0)*100);
end;
if j<12 then output;
end;
run;
%mp_loadformat(perm.testcat2
,work.stagedata2
,loadtarget=YES
,auditlibds=perm.audit
,locklibds=0
,delete_col=deleteme
,outds_add=add_test2
,outds_del=del_test2
,outds_mod=mod_test2
,mdebug=1
)
%mp_assert(
iftrue=(%mf_nobs(del_test2)=4),
desc=Test 2 - delete obs,
outds=work.test_results
)
%mp_assert(
iftrue=(%mf_nobs(mod_test2)=8),
desc=Test 2 - mod obs,
outds=work.test_results
)
%mp_assert(
iftrue=(%mf_nobs(add_test2)=10),
desc=Test 2 - add obs,
outds=work.test_results
)