Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mp_filterstore.test.2.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mp_filterstore macro with a format catalog
4
5 <h4> SAS Macros </h4>
6 @li mp_assert.sas
7 @li mp_assertdsobs.sas
8 @li mp_assertscope.sas
9 @li mddl_dc_filterdetail.sas
10 @li mddl_dc_filtersummary.sas
11 @li mddl_dc_locktable.sas
12 @li mddl_dc_maxkeytable.sas
13 @li mp_filterstore.sas
14
15**/
16
17libname permlib (work);
18
19%mddl_dc_locktable(libds=permlib.locktable)
20%mddl_dc_filtersummary(libds=permlib.filtsum)
21%mddl_dc_filterdetail(libds=permlib.filtdet)
22%mddl_dc_maxkeytable(libds=permlib.maxkey)
23
24/* valid filter */
25data work.inds;
26 infile datalines4 dsd;
27 input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
28 OPERATOR_NM:$12. RAW_VALUE:$4000.;
29datalines4;
30AND,AND,1,Start,>,"'2'"
31AND,AND,1,Fmtname,=,"'MORDOR'"
32OR,OR,2,Label,IN,"('Dragon1','Dragon2')"
33OR,OR,2,End,=,"'6'"
34OR,OR,2,Start,GE,"'10'"
35;;;;
36run;
37
38/* make some formats */
39PROC FORMAT library=permlib.testfmts;
40 picture MyMSdt other='%0Y-%0m-%0dT%0H:%0M:%0S' (datatype=datetime);
41RUN;
42data work.fmts;
43 length fmtname $32;
44 do fmtname='SMAUG','MORDOR','GOLLUM';
45 do start=1 to 10;
46 label= cats('Dragon ',start);
47 output;
48 end;
49 end;
50run;
51proc sort data=work.fmts nodupkey;
52 by fmtname start;
53run;
54proc format cntlin=work.fmts library=permlib.testfmts;
55run;
56proc format library=permlib.testfmts;
57 invalue indays (default=13) other=42;
58run;
59
60
61%mp_assertscope(SNAPSHOT)
62%mp_filterstore(libds=permlib.testfmts-fc,
63 queryds=work.inds,
64 filter_summary=permlib.filtsum,
65 filter_detail=permlib.filtdet,
66 lock_table=permlib.locktable,
67 maxkeytable=permlib.maxkey,
68 outresult=work.result,
69 outquery=work.query,
70 mdebug=1
71)
72%mp_assertscope(COMPARE)
73
74%mp_assert(iftrue=(&syscc=0),
75 desc=Ensure macro runs without errors,
76 outds=work.test_results
77)
78/* ensure only one record created */
79%mp_assertdsobs(permlib.filtsum,
80 desc=Initial query,
81 test=ATMOST 1,
82 outds=work.test_results
83)
84/* check RK is correct */
85proc sql noprint;
86select max(filter_rk) into: test1 from work.result;
87%mp_assert(iftrue=(&test1=1),
88 desc=Ensure filter rk is correct,
89 outds=work.test_results
90)
91
92/* Test 2 - load same table again and ensure we get the same RK */
93%mp_filterstore(libds=permlib.testfmts-fc,
94 queryds=work.inds,
95 filter_summary=permlib.filtsum,
96 filter_detail=permlib.filtdet,
97 lock_table=permlib.locktable,
98 maxkeytable=permlib.maxkey,
99 outresult=work.result,
100 outquery=work.query,
101 mdebug=1
102)
103/* ensure only one record created */
104%mp_assertdsobs(permlib.filtsum,
105 desc=Initial query - same obs,
106 test=ATMOST 1,
107 outds=work.test_results
108)
109/* check RK is correct */
110proc sql noprint;
111select max(filter_rk) into: test2 from work.result;
112%mp_assert(iftrue=(&test2=1),
113 desc=Ensure filter rk is correct for second run,
114 outds=work.test_results
115)