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;
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)
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.
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)
It worked for me now. I probably did something wrong with the minoperator option. After I restart the SAS EG, it worked! Thanks.
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!
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;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.