Macro logic (%IF/%THEN/%ELSE...) are for when you want the macro to conditional output SAS CODE that SAS can then execute. Once the code is generated and the generated DATA step or PROC is running the macro programming is mainly irrelevant. So if year(date)=1995, and &year=1995, then the "do" will be executed? If you want to conditionally execute statements based on whether the DATE variable's value for the current observation being processed is equal to the user specified year then you would code IF YEAR(DATE) = &YEAR THEN DO; ..... END; If the user calls the macro with YEAR set to 1995 ( %test(year=1995) ) then the code above will become : IF YEAR(DATE) = 1995 THEN DO; ..... END; Turn on the MPRINT option so that you can see what code the macro has generated.
... View more