Fluorite | Level 6

## How to calculate new variable n using the new variable n-1??

Hi guys,

I'm trying to calculate a new variable WANT(n), based on the previous observation's variable WANT(n-1).

For example, if n=1, WANT=HAVE/2;

else if n>1 then WANT(n)=WANT(n-1)*0.75+HAVE/2;

I have no idea which code to start. Could anyone give me some idea? Thanks in advance.

7 REPLIES 7
Community Manager

## Re: How to calculate geodesic distance in SAS

I'm not sure if your subject (geodesic distance) is what you meant in your question.  If so:

Check out this communities article: How to calculate geodesic distance in SAS by @MikeZdeb!

But it sounds like you need an approach that uses the LAG function (to store the value from a current obs to calculate a new value in the next record).  There are lots of papers and articles about this -- here is one.

Fluorite | Level 6

## Re: How to calculate geodesic distance in SAS

Chris,

Thank you for your reply. I changed my title. It was automatically filled in by sas when I typed my title.

My question is not only a LAG function question. I think it's more of a LOOP function question, but I don't know how to use it, since the lagged variable I need to use to construct my new variable also need to be constructed the same way, because it's the same new variable, if this makes sense.

Regards,

Haimeng

Community Manager

## Re: How to calculate new variable n using the new variable n-1??

I think that the implicit loop in the DATA step takes care of this for you.  Here's a simple example.

``````data test;
set sashelp.class(rename=(weight=have) keep=weight);
prev_have=lag(have);
if _n_ = 1 then want=have/2;
else want=prev_have*0.75 + have/2;
run;``````

Run that and check the math to see if it's what you want.  Note that you must always load up prev_have using the lag function, unconditionally .  That makes the prev obs value available for calculation in the next iteration.

Ammonite | Level 13

## Re: How to calculate geodesic distance in SAS

Please provide a sample data set. Based on your requirement this may be you are looking for

data have;
input x;
datalines;
2
4
6
8
;

data want;
set have;
y=lag(x)*0.75+x/2;
if _n_=1 then y=x/2;
run;

Fluorite | Level 6

## Re: How to calculate geodesic distance in SAS

stat_sas, what I need is Y=lag(Y)*0.75+x/2, not y=lag(x)*0.75+x/2. That's my problem 😞

Super User

## Re: How to calculate geodesic distance in SAS

Post sample data.

However, I think all you need is a retain.

``````retain y;

***rest of code;

y=y*0.75+x/2;``````

Ammonite | Level 13

## Re: How to calculate geodesic distance in SAS

As mentioned earlier by Reeza, retain statement will be required to get previous value of y for calcuation. Please try the following code:

data want;
set have;
retain y;
if _n_=1 then y=x/2;
else y=y*0.75+x/2;
run;

Discussion stats
• 7 replies
• 948 views
• 4 likes
• 4 in conversation