## DATA Step, Macro, Functions and more

Solved
Contributor
Posts: 36

I have the following dataset.

``````data input;
input trans_yearmon 8. rv_acct 5.2  factor 8.2   ;
datalines;
201506 0.21
201507       -0.62
201508       1.65
201509       0.09
201510       0.28
;
run;``````

I want rv_act to be = lag(rv_act) + factor.
So the new dataset should look as follows -

 B C D E 1 rv_acct factor rv_acct_formula 2 201506 0.21 3 201507 -\$0.41 -\$0.62 C3 = C2 + D3 4 201508 \$1.24 \$1.65 C4 = C3 + D4 5 201509 \$1.33 \$0.09 C5 = C4 + D5 6 201510 \$1.61 \$0.28 C6 = C5 + D6

Can you kindly tell me how to do it in SAS ? I was using 'lag operator' but that was not helpful ..

-Rajat

Accepted Solutions
Solution
‎07-19-2016 09:22 AM
Super User
Posts: 10,782

``````data input;
input trans_yearmon  rv_acct  factor   ;
datalines;
201506 0.21  .
201507   .    -0.62
201508  .     1.65
201509    .   0.09
201510   .    0.28
;
run;
data want;
set input;
retain lag;
if _n_=1 then lag=rv_acct ;
else do;
rv_acct=lag+factor;lag=rv_acct;
end;
drop lag;
run;``````

All Replies
Super User
Posts: 23,724

Lag is correct methodology. Post your code that didn't work.

Super User
Posts: 23,724

Sorry, just use retain.

Retain rv_acct;

rv_account+factor;

This should be a new variable in the dataset otherwise you might get unexpected results.

Solution
‎07-19-2016 09:22 AM
Super User
Posts: 10,782

``````data input;
input trans_yearmon  rv_acct  factor   ;
datalines;
201506 0.21  .
201507   .    -0.62
201508  .     1.65
201509    .   0.09
201510   .    0.28
;
run;
data want;
set input;
retain lag;
if _n_=1 then lag=rv_acct ;
else do;
rv_acct=lag+factor;lag=rv_acct;
end;
drop lag;
run;``````
☑ This topic is solved.