Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mp_stripdiffs.test.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mp_stripdiffs.sas macro
4 @details
5
6 <h4> SAS Macros </h4>
7 @li mp_assert.sas
8 @li mp_assertscope.sas
9 @li mp_ds2md.sas
10 @li mp_storediffs.sas
11 @li mp_stripdiffs.sas
12
13**/
14
15/* make an adjustable base dataset */
16/* use a composite key also (name weight) */
17libname libby (work);
18data libby.class;
19 set sashelp.class;
20run;
21
22/* first, store some diffs */
23data work.orig work.deleted work.changed work.appended;
24 set libby.class;
25 if _n_=1 then do;
26 call symputx('delname',name);
27 output work.orig work.deleted;
28 end;
29 else if _n_=2 then do;
30 output work.orig;
31 call symputx('modname',name);
32 call symputx('modval',age);
33 age=99;
34 output work.changed;
35 end;
36 else do;
37 name='Newbie';
38 output work.appended;
39 stop;
40 end;
41run;
42%mp_storediffs(libby.class,work.orig,NAME WEIGHT
43 ,delds=work.deleted
44 ,modds=work.changed
45 ,appds=work.appended
46 ,outds=work.audit
47 ,loadref=UPLOAD1
48 ,mdebug=0
49)
50%mp_ds2md(work.audit)
51%mp_assert(
52 iftrue=(&syscc=0),
53 desc=Checking preparation case,
54 outds=work.test_results
55)
56
57/* apply the changes */
58proc sql;
59delete from libby.class where name in ("&delname","&modname");
60proc append base=libby.class data=work.appended;
61proc append base=libby.class data=work.changed;
62run;
63
64/* now, prepare the revert dataset */
65%mp_assertscope(SNAPSHOT)
66%mp_stripdiffs(libby.class
67 ,UPLOAD1
68 ,work.audit
69 ,outds=work.mp_stripdiffs
70 ,mdebug=1
71)
72%mp_ds2md(work.mp_stripdiffs)
73%mp_assertscope(COMPARE)
74
75%mp_assert(
76 iftrue=(&syscc=0),
77 desc=Checking the failure condition,
78 outds=work.test_results
79)
80
81%let delpass=0;
82%let modpass=0;
83%let addpass=0;
84data _null_;
85 set work.mp_stripdiffs;
86 if upcase(_____DELETE__THIS__RECORD_____)='NO' and name="&delname"
87 then call symputx('delpass',1);
88 if name="&modname" and age=&modval then call symputx('modpass',1);
89 if upcase(_____DELETE__THIS__RECORD_____)='YES' and name="Newbie"
90 then call symputx('addpass',1);
91run;
92
93%mp_assert(
94 iftrue=(&delpass=1),
95 desc=Ensuring deleted record is back in the dataset,
96 outds=work.test_results
97)
98%mp_assert(
99 iftrue=(&modpass=1),
100 desc=Ensuring modified record now has old value,
101 outds=work.test_results
102)
103%mp_assert(
104 iftrue=(&addpass=1),
105 desc=Ensuring added record is now marked for deletion,
106 outds=work.test_results
107)