As macro statements are executed prior to DATA step statements, macro function %scan considers i as the character 'i' and hence the error. The variable 'i' only gets created at data step execution phase. Call execute comes to rescue. SAS statements produced by the EXECUTE routine do not execute until after the step boundary has been passed & that's when variable 'i' is created and can be used. Below code should work (although I am not sure what is the objective of the code. Also, 3rd argument may be required to %scan; lag<n> is unavailable as a macro function) data t2; set t; do i=1 to 2; call execute ( '%let var = %scan(&vars,' || i || ',%str( ) )' ); call execute ( '%let &var._lag1 = lag1(&var.)' ); end; run;
... View more