diff --git a/base/mp_stackdiffs.sas b/base/mp_stackdiffs.sas index 33b1ba4..d35052b 100644 --- a/base/mp_stackdiffs.sas +++ b/base/mp_stackdiffs.sas @@ -299,6 +299,7 @@ proc transpose data=&ds1d(where=(tgtvar_type='C')) var OLDVAL_CHAR; run; data &outdel; + if 0 then set &baselibds; set &ds2d; set &ds3d; drop key_hash; @@ -328,6 +329,7 @@ proc transpose data=&ds1a(where=(tgtvar_type='C')) var NEWVAL_CHAR; run; data &outadd; + if 0 then set &baselibds; set &ds2a; set &ds3a; drop key_hash; @@ -358,9 +360,13 @@ proc transpose data=&ds1m(where=(tgtvar_type='C')) var NEWVAL_CHAR; run; data &outmod; + if 0 then set &baselibds; set &ds2m; set &ds3m; run; +proc sort; + by &key; +run; /** * Extract matching records from the base table @@ -422,8 +428,8 @@ run; * Problems - where record already exists, or base table has columns missing */ %let missvars=%mf_wordsinstr1butnotstr2( - Str1=%mf_getvarlist(&outadd), - Str2=%mf_getvarlist(&baselibds) + Str1=%upcase(%mf_getvarlist(&outadd)), + Str2=%upcase(%mf_getvarlist(&baselibds)) ); %if %length(&missvars)>0 %then %do; /* add them to the err table */ @@ -480,7 +486,7 @@ select distinct tgtvar_nm into: missvars separated by ' ' where move_type='M' and is_diff=1; %let missvars=%mf_wordsinstr1butnotstr2( Str1=&missvars, - Str2=%mf_getvarlist(&baselibds) + Str2=%upcase(%mf_getvarlist(&baselibds)) ); %if %length(&missvars)>0 %then %do; /* add them to the err table */ @@ -524,9 +530,10 @@ select distinct tgtvar_nm into: missvars separated by ' ' if not b; run; /* now - we can prepare the final MOD table (which is currently PK only) */ - proc sql(undo_policy=none); + proc sql undo_policy=none; create table &outmod as - select a.* /* includes KEY_HASH from audit ds */ + select a.key_hash + ,b.* from &outmod a inner join &base b on &keyjoin @@ -552,7 +559,8 @@ select distinct tgtvar_nm into: missvars separated by ' ' proc datasets lib=work; delete &prefix:; run; + %put &sysmacroname exit vars:; + %put _local_; %end; - %mend mp_stackdiffs; -/** @endcond */` \ No newline at end of file +/** @endcond */ \ No newline at end of file diff --git a/tests/crossplatform/mp_stackdiffs.test.sas b/tests/crossplatform/mp_stackdiffs.test.sas index 5fc2e00..8be96a8 100644 --- a/tests/crossplatform/mp_stackdiffs.test.sas +++ b/tests/crossplatform/mp_stackdiffs.test.sas @@ -45,8 +45,12 @@ run; /** * Deletions test - where record does not exist */ +data work.final1; + set work.final; + where move_type='D'; +run; %mp_stackdiffs(work.orig - ,work.final + ,work.final1 ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds1 @@ -69,8 +73,12 @@ data work.orig2; set sashelp.electric; if _n_ le 10; run; +data work.final2; + set work.final; + where move_type='D'; +run; %mp_stackdiffs(work.orig2 - ,work.final + ,work.final2 ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds2 @@ -94,8 +102,12 @@ data work.orig3; set work.orig; stop; run; +data work.final3; + set work.final; + where move_type='A'; +run; %mp_stackdiffs(work.orig3 - ,work.final + ,work.final3 ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds3 @@ -119,8 +131,12 @@ data work.orig4; set work.orig; if _n_>35 then stop; run; +data work.final4; + set work.final; + where move_type='A'; +run; %mp_stackdiffs(work.orig4 - ,work.final + ,work.final4 ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds4 @@ -144,8 +160,12 @@ data work.orig5; set work.orig; drop Coal; run; +data work.final5; + set work.final; + where move_type='A'; +run; %mp_stackdiffs(work.orig5 - ,work.final + ,work.final5 ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds5 @@ -167,7 +187,7 @@ run; */ data work.final6; set work.final; - drop Coal; + where tgtvar_nm ne 'COAL' and move_type='A'; run; %mp_stackdiffs(work.orig ,work.final6 @@ -194,8 +214,12 @@ data work.orig7; set work.orig; drop Coal; run; +data work.final7; + set work.final; + where move_type='M'; +run; %mp_stackdiffs(work.orig7 - ,work.final + ,work.final7 ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds7 @@ -220,14 +244,16 @@ run; test=EQUALS 0 ) /** - * Modifications test - where base table has missing rows + * Modifications (big) test - where base table has missing rows + * Also used as a full integration test (all move_types) + * And a test if the actual values were applied */ data work.orig8; set work.orig; if _n_ le 16; run; %mp_stackdiffs(work.orig8 - ,work.final7 + ,work.final ,CUSTOMER YEAR ,mdebug=1 ,errds=work.errds8 @@ -243,14 +269,6 @@ run; desc=Mod8 - 6 records populated (missing rows relevant), test=EQUALS 6 ) -%mp_assertdsobs(work.add8, - desc=add8 - 0 records populated , - test=EQUALS 0 -) -%mp_assertdsobs(work.del8, - desc=del8 - 0 records populated , - test=EQUALS 0 -) /** * Modifications test - were diffs actually applied? diff --git a/tests/testinit.sas b/tests/testinit.sas index e1026ea..a877f16 100644 --- a/tests/testinit.sas +++ b/tests/testinit.sas @@ -15,7 +15,8 @@ %mp_init() %macro loglevel(); - %if &_debug=2477 %then %do; + %if "&_debug"="2477" or "&_debug"="fields,log,trace" %then %do; + %put debug mode activated; options mprint; %end; %mend loglevel;