Hi, I'm having real problems correctly creating a value using Lag through a macro.Below is the code and some test data. I want to lag the response_sum field by the value in the field "for_m3". Using line 14 as an example, I want to resolve to a value of lag2 (which should equal 3426). But instead it puts the value 4001. The log shows this: MPRINT(LAGIT): response_lag3=lag2(response_sum); So I would reasonably expect the value in response_lag3 to be 3426 - but it's 4001 data test_data; length month 3. response_sum 8. for_m3 8. ; infile datalines delimiter=','; input month response_sum for_m3 ; datalines; 1,4877,0 2,8388,0 3,8766,0 4,8491,3 5,6953,3 6,4823,3 7,5761,3 8,7638,3 9,5613,3 10,4258,3 11,4001,3 12,3426,3 13,1414,2 14,1347,2 15,1117,0 16,663,3 ; run; proc sort test_data; by month; run; %macro lagit(lag_num); %do b=1 %to &obs_for_macro.; response_lag&lag_num.=lag&&for_m&lag_num._&b.(response_sum); %end; if for_m&lag_num.=0 then do; response_lag&lag_num.=0; end; %mend ; data _null_; set test_data; by month; call symput("for_m3_"||left(_n_),compress(for_m3)); if last.month then call symput("obs_for_macro",left(_n_)); run; %macro L3m(); data test_data_lag; set test_data; %lagit(3); run; %mend l3m; %L3m(); Thanks in advance for your help.
... View more