-
Notifications
You must be signed in to change notification settings - Fork 2
/
_bin.sas
72 lines (49 loc) · 1.85 KB
/
_bin.sas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
%put NOTE: You have called the macro _BIN, 2013-09-05.;
%put NOTE: Copyright (c) 2001-2013 Rodney Sparapani;
%put;
/*
Author: Rodney Sparapani <[email protected]>
Created: 2001-00-00
This file is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this file; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* _BIN Documentation
Creates long IN() operators. Replacement for %_IN() SAS macro
which mysteriously stopped working with SAS v. 9.3 TS1M2. The
B in _BIN stands for "better" like %BQUOTE() is a better %QUOTE().
Instead of:
if hcpcs_cd %_in('63265'-'63285', by=5) then ex15=1;
Now, we write:
if hcpcs_cd %_bin('63265'-'63285'@5) then ex15=1;
POSITIONAL Parameters
N/A
NAMED Parameters
N/A
*/
%macro _bin/parmbuff;
%local i j;
%*put SYSPBUFF=&syspbuff;
%let j=%_count(&syspbuff, split=%str(,()));
in(%do i=1 %to &j;
%_list(%qscan(&syspbuff, &i, %str(,())), split=%str(,)) %if &i<&j %then ,;
%end;)
%mend _bin;
%*VALIDATION TEST STREAM;
/* un-comment to re-validate
data _null_;
hcpcs_cd='63279';
if hcpcs_cd %_bin('22100', '22110', '22318', '22319', '22326', '22548',
'22590', '22595', '61343', '63180', '63182', '63194', '63196', '63198',
'63250', '63265'-'63285', '63300', '63304') then ex15=1;
put ex15=;
run;
*/