Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mp_stackdiffs.test.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mp_storediffs macro
4
5 <h4> SAS Macros </h4>
6 @li mp_assertcolvals.sas
7 @li mp_assertdsobs.sas
8 @li mp_assertscope.sas
9 @li mp_stackdiffs.sas
10 @li mp_storediffs.sas
11
12**/
13
14/* first, make some data */
15
16data work.orig work.deleted work.changed work.appended;
17 set sashelp.electric;
18 if _n_ le 10 then do;
19 output work.deleted;
20 end;
21 else if _n_ le 20 then do;
22 output work.orig;
23 coal=-1;
24 coaltip='modified';
25 output work.changed;
26 end;
27 else if _n_ le 30 then do;
28 year=_n_;
29 output work.appended;
30 end;
31 else stop;
32run;
33
34%mp_storediffs(sashelp.electric
35 ,work.orig
36 ,CUSTOMER YEAR
37 ,delds=work.deleted
38 ,modds=work.changed
39 ,appds=work.appended
40 ,outds=work.final
41 ,mdebug=1
42)
43
44
45%mp_assertscope(SNAPSHOT)
46
47/**
48 * Deletions test - where record does exist
49 */
50data work.orig1;
51 set sashelp.electric;
52 if _n_ le 10;
53run;
54data work.final1;
55 set work.final;
56 where move_type='D';
57run;
58%mp_stackdiffs(work.orig1
59 ,work.final1
60 ,CUSTOMER YEAR
61 ,mdebug=1
62 ,errds=work.errds1
63 ,outmod=work.mod1
64 ,outadd=work.add1
65 ,outdel=work.del1
66)
67%mp_assertdsobs(work.errds1,
68 desc=Delete1 - no errs,
69 test=EQUALS 0
70)
71%mp_assertdsobs(work.del1,
72 desc=Delete1 - records populated,
73 test=EQUALS 10
74)
75/**
76 * Deletions test - where record does NOT exist
77 */
78data work.orig2;
79 set work.orig;
80 stop; /* empty table */
81run;
82data work.final2;
83 set work.final;
84 where move_type='D';
85run;
86%mp_stackdiffs(work.orig2
87 ,work.final2
88 ,CUSTOMER YEAR
89 ,mdebug=1
90 ,errds=work.errds2
91 ,outmod=work.mod2
92 ,outadd=work.add2
93 ,outdel=work.del2
94)
95%mp_assertdsobs(work.errds2,
96 desc=Delete2 - has errs,
97 test=EQUALS 10
98)
99%mp_assertdsobs(work.del2,
100 desc=Delete2 - records not populated,
101 test=EQUALS 0
102)
103
104/**
105 * Additions test - where record does not exist
106 */
107data work.orig3;
108 set work.orig;
109 stop;
110run;
111data work.final3;
112 set work.final;
113 where move_type='A';
114run;
115%mp_stackdiffs(work.orig3
116 ,work.final3
117 ,CUSTOMER YEAR
118 ,mdebug=1
119 ,errds=work.errds3
120 ,outmod=work.mod3
121 ,outadd=work.add3
122 ,outdel=work.del3
123)
124%mp_assertdsobs(work.errds3,
125 desc=Add3 - no errs,
126 test=EQUALS 0
127)
128%mp_assertdsobs(work.add3,
129 desc=Add3 - records populated,
130 test=EQUALS 10
131)
132
133/**
134 * Additions test - where record does exist
135 */
136data work.orig4;
137 set sashelp.electric;
138 if _n_ ge 20;
139 year=_n_;
140 if _n_>25 then stop;
141run;
142data work.final4;
143 set work.final;
144 where move_type='A';
145run;
146%mp_stackdiffs(work.orig4
147 ,work.final4
148 ,CUSTOMER YEAR
149 ,mdebug=1
150 ,errds=work.errds4
151 ,outmod=work.mod4
152 ,outadd=work.add4
153 ,outdel=work.del4
154)
155%mp_assertdsobs(work.errds4,
156 desc=Add4 - 5 errs,
157 test=EQUALS 5
158)
159%mp_assertdsobs(work.add4,
160 desc=Add4 - records populated,
161 test=EQUALS 5
162)
163
164/**
165 * Additions test - where base table has missing vars
166 */
167data work.orig5;
168 set work.orig;
169 drop Coal;
170run;
171data work.final5;
172 set work.final;
173 where move_type='A';
174run;
175%mp_stackdiffs(work.orig5
176 ,work.final5
177 ,CUSTOMER YEAR
178 ,mdebug=1
179 ,errds=work.errds5
180 ,outmod=work.mod5
181 ,outadd=work.add5
182 ,outdel=work.del5
183)
184%mp_assertdsobs(work.errds5,
185 desc=Add5 - 10 errs,
186 test=EQUALS 10
187)
188%mp_assertdsobs(work.add5,
189 desc=Add5 - 0 records populated due to structure change,
190 test=EQUALS 0
191)
192
193/**
194 * Additions test - where append table has missing vars
195 */
196data work.final6;
197 set work.final;
198 where tgtvar_nm ne 'COAL' and move_type='A';
199run;
200%mp_stackdiffs(work.orig
201 ,work.final6
202 ,CUSTOMER YEAR
203 ,mdebug=1
204 ,errds=work.errds6
205 ,outmod=work.mod6
206 ,outadd=work.add6
207 ,outdel=work.del6
208)
209%mp_assertdsobs(work.errds6,
210 desc=Add6 - 0 errs,
211 test=EQUALS 0
212)
213%mp_assertdsobs(work.add6,
214 desc=Add6 - 10 records populated (structure change irrelevant),
215 test=EQUALS 10
216)
217
218/**
219 * Modifications test - where base table has missing vars
220 */
221data work.orig7;
222 set work.orig;
223 drop Coal;
224run;
225data work.final7;
226 set work.final;
227 where move_type='M';
228run;
229%mp_stackdiffs(work.orig7
230 ,work.final7
231 ,CUSTOMER YEAR
232 ,mdebug=1
233 ,errds=work.errds7
234 ,outmod=work.mod7
235 ,outadd=work.add7
236 ,outdel=work.del7
237)
238%mp_assertdsobs(work.errds7,
239 desc=Mod7 - 10 errs,
240 test=EQUALS 10
241)
242%mp_assertdsobs(work.Mod7,
243 desc=Mod7 - 0 records populated (structure change relevant),
244 test=EQUALS 0
245)
246%mp_assertdsobs(work.add7,
247 desc=add7 - 0 records populated ,
248 test=EQUALS 0
249)
250%mp_assertdsobs(work.del7,
251 desc=del7 - 0 records populated ,
252 test=EQUALS 0
253)
254/**
255 * Modifications (big) test - where base table has missing rows
256 * Also used as a full integration test (all move_types)
257 * And a test if the actual values were applied
258 */
259data work.orig8;
260 set sashelp.electric;
261 if _n_ le 16;
262run;
263%mp_stackdiffs(work.orig8
264 ,work.final
265 ,CUSTOMER YEAR
266 ,mdebug=1
267 ,errds=work.errds8
268 ,outmod=work.mod8
269 ,outadd=work.add8
270 ,outdel=work.del8
271)
272%mp_assertdsobs(work.errds8,
273 desc=Mod4 - 4 errs,
274 test=EQUALS 4
275)
276%mp_assertdsobs(work.Mod8,
277 desc=Mod8 - 6 records populated (missing rows relevant),
278 test=EQUALS 6
279)
280
281/**
282 * Modifications test - were diffs actually applied?
283 */
284data work.checkds;
285 charchk='modified';
286 numchk=-1;
287 output;
288run;
289%mp_assertcolvals(work.mod8.coal,
290 checkvals=work.checkds.numchk,
291 desc=Modified numeric value matches,
292 test=ALLVALS
293)
294%mp_assertcolvals(work.mod8.coaltip,
295 checkvals=work.checkds.charchk,
296 desc=Modified char value matches,
297 test=ALLVALS
298)
299
300
301%mp_assertscope(COMPARE,ignorelist=_SASJS_FUNCTIONS)