- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Can I use 'in' operator in macros? It seems the following code doesn't work. Thanks.
%macro test(a);
%if %upcase(&a.) in (A, B, C) %then %let name = Mike;
%mend test;
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
What SAS/EG version you have? It works for me on both SAS 9.3/9.4 with EG 5.1
On my test, it works even when parenthesis is present:
%macro test(a) /minoperator;
%if %upcase(&a) in (A B C) %then %put Hello;
%mend test;
%test(a)
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Well, I tried this in PC SAS and it worked.
%macro test(a) /minoperator;
%if %upcase(&a) in A B C %then %put Hello;
%mend test;
%test(a);
However, it doesn't work in SAS EG. Any other suggestion? Do I have to write them by ' xxx or xxx or xxx'? Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
What SAS/EG version you have? It works for me on both SAS 9.3/9.4 with EG 5.1
On my test, it works even when parenthesis is present:
%macro test(a) /minoperator;
%if %upcase(&a) in (A B C) %then %put Hello;
%mend test;
%test(a)
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
It worked for me now. I probably did something wrong with the minoperator option. After I restart the SAS EG, it worked! Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Here's a reference article I found handy for working with the in operator in macros. It entails listing the 'in' delimiter.
Hope this helps!
Sample 35591: How to use the new macro IN operator for SAS 9.2
http://support.sas.com/kb/35/591.html
Starting SAS 9.2, there is an IN operator for the macro language. The IN operator can now be used on the %IF statement when the MINOPERATOR option is set on the %MACRO statement or as a SAS system option.
options minoperator mlogic;
%macro test(value)/mindelimiter=',';
%if &value in 1,2,3,4,5,6 %then
%put Value found within list.;
%else %put Value not in list.;
%mend;