Starting in SAS 9.2 you can use the macro IN operator via the MINOPERATOR option and associated MINDELIMITER option. The MINOPERATOR is OFF (NOMINDELIMITER) by default and can be used as a global option (e.g. options minoperator ; ) or the more flexible and preferred macro option (after the slash [ / ] on the macro definition) as shown in the below example. This is especially critical for stored and compiled macros as the options are reflected at compilation time.
The default delimiter is a BLANK so if you want to a comma, specify it using the MINDELIMITER= option.
%macro test( state ) / minoperator mindelimiter=',' ; %if %upcase( &state. ) in( CO, KS, MO, IL ) %then %do ; %put its in there ; %end ; %else %put not found ; %mend ; %test( KS ) %test( NY ) 119 %test( KS ) its in there 120 %test( NY ) not found
If you want to use this as a negative version [ NOT IN() ] you need to place the NOT around the entire expression, not just next to the IN operator as follows:
%macro test( state ) / minoperator mindelimiter=',' ; %if not( %upcase( &state. ) in( CO, KS, MO, IL ) ) %then %do ; %put its in there ; %end ; %else %put not found ; %mend ; %test( ks ) %test( ny ) 8 %test( ks ) not found 9 %test( ny ) its in there