Macros for SAS Application Developers
https://github.com/sasjs/core
mp_filtergenerate.test.sas
Go to the documentation of this file.
1 /**
2  @file
3  @brief Testing mp_filtergenerate macro
4 
5  <h4> SAS Macros </h4>
6  @li mp_filtergenerate.sas
7  @li mp_filtercheck.sas
8  @li mp_assertdsobs.sas
9 
10 **/
11 
12 options source2;
13 
14 /* set up test data */
15 data work.class ;
16 length name $8 sex $1 age height weight 8;
17 infile cards dsd;
18 input Name:$char. Sex :$char. Age Height Weight;
19 datalines4;
20 Alfred,M,14,69,112.5
21 Alice,F,13,56.5,84
22 Barbara,F,13,65.3,98
23 Carol,F,14,62.8,102.5
24 Henry,M,14,63.5,102.5
25 James,M,12,57.3,83
26 Jane,F,12,59.8,84.5
27 Janet,F,15,62.5,112.5
28 Jeffrey,M,13,62.5,84
29 John,M,12,59,99.5
30 Joyce,F,11,51.3,50.5
31 Judy,F,14,64.3,90
32 Louise,F,12,56.3,77
33 Mary,F,15,66.5,112
34 Philip,M,16,72,150
35 Robert,M,12,64.8,128
36 Ronald,M,15,67,133
37 Thomas,M,11,57.5,85
38 William,M,15,66.5,112
39 ;;;;
40 run;
41 
42 /* valid filter */
43 data work.inds;
44  infile datalines4 dsd;
45  input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
46  OPERATOR_NM:$10. RAW_VALUE:$4000.;
47 datalines4;
48 AND,AND,1,AGE,>,5
49 AND,AND,1,SEX,NE,"'M'"
50 AND,OR,2,Name,NOT IN,"('Jane','Janet')"
51 AND,OR,2,Weight,>=,84.6
52 ;;;;
53 run;
54 %mp_filtercheck(work.inds,targetds=work.class)
55 %mp_filtergenerate(work.inds,outref=myfilter)
56 data work.test;
57  set work.class;
58  where %inc myfilter;;
59 run;
60 %mp_assertdsobs(work.test,
61  desc=Valid filter,
62  test=EQUALS 8,
63  outds=work.test_results
64 )
65 
66 /* empty filter (return all records) */
67 data work.inds;
68  infile datalines4 dsd;
69  input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
70  OPERATOR_NM:$10. RAW_VALUE:$4000.;
71 datalines4;
72 ;;;;
73 run;
74 %mp_filtercheck(work.inds,targetds=work.class)
75 %mp_filtergenerate(work.inds,outref=myfilter)
76 data work.test;
77  set work.class;
78  where %inc myfilter;;
79 run;
80 %mp_assertdsobs(work.test,
81  desc=Empty filter (return all records) ,
82  test=EQUALS 19,
83  outds=work.test_results
84 )
85 
86 /* single line filter */
87 data work.inds;
88  infile datalines4 dsd;
89  input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
90  OPERATOR_NM:$10. RAW_VALUE:$4000.;
91 datalines4;
92 AND,OR,2,Name,IN,"('Jane','Janet')"
93 ;;;;
94 run;
95 %mp_filtercheck(work.inds,targetds=work.class)
96 %mp_filtergenerate(work.inds,outref=myfilter)
97 data work.test;
98  set work.class;
99  where %inc myfilter;;
100 run;
101 %mp_assertdsobs(work.test,
102  desc=Single line filter ,
103  test=EQUALS 2,
104  outds=work.test_results
105 )
106 
107 /* single line 2 group filter */
108 data work.inds;
109  infile datalines4 dsd;
110  input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
111  OPERATOR_NM:$10. RAW_VALUE:$4000.;
112 datalines4;
113 OR,OR,2,Name,IN,"('Jane','Janet')"
114 OR,OR,3,Name,IN,"('James')"
115 ;;;;
116 run;
117 %mp_filtercheck(work.inds,targetds=work.class)
118 %mp_filtergenerate(work.inds,outref=myfilter)
119 data work.test;
120  set work.class;
121  where %inc myfilter;;
122 run;
123 %mp_assertdsobs(work.test,
124  desc=Single line 2 group filter ,
125  test=EQUALS 3,
126  outds=work.test_results
127 )
128 
129 /* filter with nothing returned */
130 data work.inds;
131  infile datalines4 dsd;
132  input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
133  OPERATOR_NM:$10. RAW_VALUE:$4000.;
134 datalines4;
135 AND,OR,2,Name,IN,"('Jane','Janet')"
136 AND,OR,3,Name,IN,"('James')"
137 ;;;;
138 run;
139 %mp_filtercheck(work.inds,targetds=work.class)
140 %mp_filtergenerate(work.inds,outref=myfilter)
141 data work.test;
142  set work.class;
143  where %inc myfilter;;
144 run;
145 %mp_assertdsobs(work.test,
146  desc=Filter with nothing returned,
147  test=EQUALS 0,
148  outds=work.test_results
149 )
150