Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mp_loadformat.test.1.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mp_loadformat.sas macro
4 @details first test regular formats, then informats
5
6 <h4> SAS Macros </h4>
7 @li mddl_dc_difftable.sas
8 @li mf_nobs.sas
9 @li mp_aligndecimal.sas
10 @li mp_assert.sas
11 @li mp_assertscope.sas
12 @li mp_cntlout.sas
13 @li mp_loadformat.sas
14
15**/
16
17/* prep format catalog */
18libname perm (work);
19
20%mddl_dc_difftable(libds=perm.audit)
21
22/* set up regular formats */
23data work.loadfmts;
24 /* matching start / end lengths (to baseds) are important */
25 length fmtname $32 start end $10000;
26 eexcl='Y';
27 type='N';
28 do i=1 to 10;
29 fmtname=cats('SASJS_',put(i,z4.),'X');
30 do j=1 to 20;
31 start=cats(j);
32 end=cats(j+1);
33 %mp_aligndecimal(start,width=16)
34 %mp_aligndecimal(end,width=16)
35 label= cats('Numeric Format ',start);
36 output;
37 end;
38 end;
39run;
40proc format cntlin=work.loadfmts library=perm.testcat;
41run;
42
43/*
44 use actual format data as test baseline, as proc format adds attributes eg
45 min/max etc
46*/
47%mp_cntlout(libcat=perm.testcat,cntlout=work.loadfmts2)
48
49/* make some test data */
50data work.stagedata;
51 set work.loadfmts2 end=lastobs;
52 by type fmtname;
53
54 if lastobs then do;
55 output;
56 fmtname='NEWFMT'!!cats(_n_,'x'); /* 1 new record */
57 start=cats(_n_);
58 end=cats(_n_+1);
59 %mp_aligndecimal(start,width=16)
60 %mp_aligndecimal(end,width=16)
61 label='newval'!!cats(_N_,'X');
62 output;
63 stop;
64 end;
65 else if last.fmtname then deleteme='Yes'; /* 9 deletions */
66 else if first.fmtname then label='modified '!!cats(_n_); /* 10 changes */
67
68 output;
69run;
70
71/* load the above */
72%mp_assertscope(SNAPSHOT)
73%mp_loadformat(perm.testcat
74 ,work.stagedata
75 ,loadtarget=YES
76 ,auditlibds=perm.audit
77 ,locklibds=0
78 ,delete_col=deleteme
79 ,outds_add=add_test1
80 ,outds_del=del_test1
81 ,outds_mod=mod_test1
82 ,mdebug=1
83)
84%mp_assertscope(COMPARE)
85
86%mp_assert(
87 iftrue=(%mf_nobs(del_test1)=9),
88 desc=Test 1 - delete obs,
89 outds=work.test_results
90)
91%mp_assert(
92 iftrue=(%mf_nobs(add_test1)=1),
93 desc=Test 1 - add obs,
94 outds=work.test_results
95)
96%mp_assert(
97 iftrue=(%mf_nobs(mod_test1)=10),
98 desc=Test 1 - mod obs,
99 outds=work.test_results
100)
101%mp_assert(
102 iftrue=(%mf_nobs(perm.audit)=440),
103 desc=Test 1 - audit table updated,
104 outds=work.test_results
105)
106data work.difftest;
107 set perm.audit;
108 where is_diff=1;
109run;
110%mp_assert(
111 iftrue=(%mf_nobs(work.difftest)>0),
112 desc=Test 1 - diffs were found,
113 outds=work.test_results
114)
115
116/* set up a mix of formats */
117data work.loadfmts3;
118 length fmtname $32 start end $10000;
119 eexcl='Y';
120 type='J';
121 do i=1 to 3;
122 fmtname=cats('SASJS_CI_',i,'X');
123 do j=1 to 4;
124 start=cats(j);
125 end=start;
126 label= cats('Char INFORMAT ',start);
127 output;
128 end;
129 end;
130 type='I';
131 do i=1 to 3;
132 fmtname=cats('SASJS_NI_',i,'X');
133 do j=1 to 4;
134 start=cats(j);
135 end=cats(j+1);
136 %mp_aligndecimal(start,width=16)
137 %mp_aligndecimal(end,width=16)
138 label= cats(ranuni(0));
139 output;
140 end;
141 end;
142 type='N';
143 do i=1 to 3;
144 fmtname=cats('SASJS_NF_',i,'X');
145 do j=1 to 4;
146 start=cats(j);
147 end=cats(j+1);
148 %mp_aligndecimal(start,width=16)
149 %mp_aligndecimal(end,width=16)
150 label= cats('Numeric Format ',start);
151 output;
152 end;
153 end;
154 type='C';
155 do i=1 to 3;
156 fmtname=cats('SASJS_CF_',i,'X');
157 do j=1 to 4;
158 start=cats(j);
159 end=start;
160 label= cats('Char Format ',start);
161 output;
162 end;
163 end;
164 drop i j;
165run;
166proc format cntlin=work.loadfmts3 library=perm.testcat3;
167run;
168%mp_cntlout(libcat=perm.testcat3,cntlout=work.loadfmts4)
169
170/* make some test data */
171data work.stagedata3;
172 set work.loadfmts4;
173 where type in ('I','J');
174 by type fmtname notsorted;
175 if type='I' then do;
176 if last.fmtname then do;
177 deleteme='Yes'; /* 3 deletions */
178 output;
179 end;
180 else if fmtrow le 3 then do; /* 9 changed values */
181 z=ranuni(0)*1000000;
182 start=cats(z);
183 end=cats(z+1);
184 %mp_aligndecimal(start,width=16)
185 %mp_aligndecimal(end,width=16)
186 output;
187 end;
188 end;
189 else do;
190 if last.fmtname then do;
191 output; /* 6 new records */
192 x=_n_;
193 x+1;start=cats("mod",x);end=start;label='newlabel1';fmtrow=fmtrow+1;
194 output;
195 x+1;start=cats("mod",x);end=start;label='newlabel2';fmtrow=fmtrow+2;
196 output;
197 end;
198 else if fmtrow le 3 then do; /* 9 more changed values */
199 start= cats("mod",_n_);
200 end=start;
201 label= "mod "||cats(ranuni(0)*100);
202 output;
203 end;
204 end;
205run;
206
207%mp_loadformat(perm.testcat3
208 ,work.stagedata3
209 ,loadtarget=YES
210 ,auditlibds=perm.audit
211 ,locklibds=0
212 ,delete_col=deleteme
213 ,outds_add=add_test2
214 ,outds_del=del_test2
215 ,outds_mod=mod_test2
216 ,mdebug=1
217)
218
219%mp_assert(
220 iftrue=(%mf_nobs(del_test2)=3),
221 desc=Test 2 - delete obs,
222 outds=work.test_results
223)
224%mp_assert(
225 iftrue=(%mf_nobs(mod_test2)=18),
226 desc=Test 2 - mod obs,
227 outds=work.test_results
228)
229%mp_assert(
230 iftrue=(%mf_nobs(add_test2)=6),
231 desc=Test 2 - add obs,
232 outds=work.test_results
233)
234