Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mp_filterstore.test.1.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mp_filterstore macro
4
5 <h4> SAS Macros </h4>
6 @li mddl_dc_filterdetail.sas
7 @li mddl_dc_filtersummary.sas
8 @li mddl_dc_locktable.sas
9 @li mddl_dc_maxkeytable.sas
10 @li mp_filterstore.sas
11 @li mp_assertdsobs.sas
12 @li mp_assert.sas
13
14**/
15
16/* set up test data */
17data work.class ;
18length name $8 sex $1 age height weight 8;
19infile cards dsd;
20input Name:$char. Sex :$char. Age Height Weight;
21datalines4;
22Alfred,M,14,69,112.5
23Alice,F,13,56.5,84
24Barbara,F,13,65.3,98
25Carol,F,14,62.8,102.5
26Henry,M,14,63.5,102.5
27James,M,12,57.3,83
28Jane,F,12,59.8,84.5
29Janet,F,15,62.5,112.5
30Jeffrey,M,13,62.5,84
31John,M,12,59,99.5
32Joyce,F,11,51.3,50.5
33Judy,F,14,64.3,90
34Louise,F,12,56.3,77
35Mary,F,15,66.5,112
36Philip,M,16,72,150
37Robert,M,12,64.8,128
38Ronald,M,15,67,133
39Thomas,M,11,57.5,85
40William,M,15,66.5,112
41;;;;
42run;
43
44libname permlib (work);
45
46%mddl_dc_locktable(libds=permlib.locktable)
47%mddl_dc_filtersummary(libds=permlib.filtsum)
48%mddl_dc_filterdetail(libds=permlib.filtdet)
49%mddl_dc_maxkeytable(libds=permlib.maxkey)
50
51/* valid filter */
52data work.inds;
53 infile datalines4 dsd;
54 input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
55 OPERATOR_NM:$12. RAW_VALUE:$4000.;
56datalines4;
57AND,AND,1,AGE,=,12
58AND,AND,1,SEX,<=,"'M'"
59AND,OR,2,Name,NOT IN,"('Jane','Alfred')"
60AND,OR,2,Weight,>=,77.7
61AND,OR,2,Weight,NE,77.7
62AND,AND,3,age,NOT IN,"(.a,.b,.)"
63AND,AND,3,age,NOT IN,"(.A)"
64AND,AND,4,Name,=,"'Jeremiah'"
65;;;;
66run;
67
68%mp_filterstore(libds=work.class,
69 queryds=work.inds,
70 filter_summary=permlib.filtsum,
71 filter_detail=permlib.filtdet,
72 lock_table=permlib.locktable,
73 maxkeytable=permlib.maxkey,
74 outresult=work.result,
75 outquery=work.query,
76 mdebug=1
77)
78%mp_assert(iftrue=(&syscc=0),
79 desc=Ensure macro runs without errors,
80 outds=work.test_results
81)
82/* ensure only one record created */
83%mp_assertdsobs(permlib.filtsum,
84 desc=Initial query,
85 test=ATMOST 1,
86 outds=work.test_results
87)
88/* check RK is correct */
89proc sql noprint;
90select max(filter_rk) into: test1 from work.result;
91%mp_assert(iftrue=(&test1=1),
92 desc=Ensure filter rk is correct,
93 outds=work.test_results
94)
95
96/* Test 2 - load same table again and ensure we get the same RK */
97%mp_filterstore(libds=work.class,
98 queryds=work.inds,
99 filter_summary=permlib.filtsum,
100 filter_detail=permlib.filtdet,
101 lock_table=permlib.locktable,
102 maxkeytable=permlib.maxkey,
103 outresult=work.result,
104 outquery=work.query,
105 mdebug=1
106)
107/* ensure only one record created */
108%mp_assertdsobs(permlib.filtsum,
109 desc=Initial query - same obs,
110 test=ATMOST 1,
111 outds=work.test_results
112)
113/* check RK is correct */
114proc sql noprint;
115select max(filter_rk) into: test2 from work.result;
116%mp_assert(iftrue=(&test2=1),
117 desc=Ensure filter rk is correct for second run,
118 outds=work.test_results
119)