Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mf_getvalue.test.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mf_getvalue macro
4
5 <h4> SAS Macros </h4>
6 @li mf_getvalue.sas
7 @li mp_assert.sas
8 @li mp_assertscope.sas
9
10**/
11
12data work.test_data;
13 j = "A";
14 do i = 1 to 10;
15 output;
16 end;
17 stop;
18run;
19
20/* - Test 1 -
21 Get value from default first observation.
22 No filter.
23*/
24%mp_assertscope(SNAPSHOT)
25%let test_value=%mf_getvalue(work.test_data,i);
26%mp_assertscope(COMPARE,ignorelist=test_value)
27
28%mp_assert(
29 iftrue=(&test_value=1 and &syscc eq 0),
30 desc=Basic test fetching value from default first obs,
31 outds=work.test_results
32)
33
34/* - Test 2 -
35 Get value from 10th observation.
36 No filter.
37*/
38%let test_value=%mf_getvalue(work.test_data,i,fetchobs=10);
39%mp_assert(
40 iftrue=(&test_value=10 and &syscc eq 0),
41 desc=Test fetching value from specifically the 10th row,
42 outds=work.test_results
43)
44
45/* - Test 3 -
46 Get value from default first observation.
47 With filter.
48*/
49%let test_value=%mf_getvalue(work.test_data,i,filter=(i>4));
50%mp_assert(
51 iftrue=(&test_value=5 and &syscc eq 0),
52 desc=Test fetching value from default row of filtered data,
53 outds=work.test_results
54)
55
56/* - Test 4 -
57 Get value from specified observation.
58 With filter.
59*/
60%let test_value=%mf_getvalue(work.test_data,i,filter=(i>4),fetchobs=5);
61%mp_assert(
62 iftrue=(&test_value=9 and &syscc eq 0),
63 desc=Test fetching value from 5th row of filtered data,
64 outds=work.test_results
65)
66
67/* - Test 5 -
68 Get numeric value from default observation.
69 Filter removes all rows. This simulates providing an empty dataset
70 or specifying an observation number beyond the set returned by the filter.
71 Default warn parameter setting avoids raising a w@rning.
72*/
73%let test_value=%mf_getvalue(work.test_data,i,filter=(i>10));
74%mp_assert(
75 iftrue=(&test_value=. and &syscc eq 0),
76 desc=Test fetching value from 1st row of empty (filtered) data,
77 outds=work.test_results
78)
79
80/* - Test 6 -
81 Get numeric from default observation.
82 Filter removes all rows. This simulates providing an empty dataset
83 or specifying an observation number beyond the set returned by the filter.
84 Explicitly raise a w@rning when reading past end of data.
85*/
86%let test_value=%mf_getvalue(work.test_data,i,filter=(i>10),warn=1);
87%mp_assert(
88 iftrue=(&test_value=. and &syscc eq 4),
89 desc=Test fetching value from 1st row of empty (filtered) data,
90 outds=work.test_results
91)
92
93%let syscc=0;
94
95/* - Test 7 -
96 Get character value from default observation.
97 Filter removes all rows. This simulates providing an empty dataset
98 or specifying an observation number beyond the set returned by the filter.
99 Default warn parameter setting avoids raising a w@rning.
100*/
101%let test_value=%mf_getvalue(work.test_data,j,filter=(i>10));
102%mp_assert(
103 iftrue=(&test_value=%str() and &syscc eq 0),
104 desc=Test fetching value from 1st row of empty (filtered) data,
105 outds=work.test_results
106)
107
108/* - Test 8 -
109 Get character value from default observation.
110 Filter removes all rows. This simulates providing an empty dataset
111 or specifying an observation number beyond the set returned by the filter.
112 Explicitly raise a w@rning when reading past end of data.
113*/
114%let test_value=%mf_getvalue(work.test_data,j,filter=(i>10),warn=1);
115%mp_assert(
116 iftrue=(&test_value=%str() and &syscc eq 4),
117 desc=Test fetching value from 1st row of empty (filtered) data,
118 outds=work.test_results
119)
120%let syscc=0;
121
122/* - Test 9 -
123 Get character value from default observation.
124 Ensure that the returned value is sourced from the input data set or set to
125 missing. Prevent accidentally returning value from a global macro variable
126 with the same name as the requested column.
127 Filter removes all rows. This simulates providing an empty dataset
128 or specifying an observation number beyond the set returned by the filter.
129*/
130%let j = Z;
131%let test_value=%mf_getvalue(work.test_data,j,filter=(i>10));
132%mp_assert(
133 iftrue=(&test_value eq %str()),
134 desc=%sysfunc(
135 compbl(
136 Test fetching value from an empty (filtered) input with
137 a column name identical to an existing global macrovariable.
138 )
139 ),
140 outds=work.test_results
141)
142%let syscc=0;
143%symdel j / nowarn;