Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: st: Average of previous years

 From Nick Cox To statalist@hsphsun2.harvard.edu Subject Re: st: Average of previous years Date Mon, 11 Apr 2011 15:02:12 +0100

```I agree with Charles. I wouldn't write out a long expression for
longer windows. The question said 5 and there is a easy and direct
solution.

But I wouldn't stop at two when counting. This technique is often
overlooked, for example:

bysort panelid (time) : gen double sum = sum(myvar)
by panelid : gen double mean = (sum[_n-1] - sum[_n-6])/5

Most simple code will need fixing for missings and irregular spacing.

Nick

On Mon, Apr 11, 2011 at 2:48 PM, Charles Koss <hqtiger@gmail.com> wrote:

> There are two other ways for obtaining the same results, by using the
> tsmooth command. In the first case, you need to place dots while in
> the second case you need an auxiliary series. In conclusion, for the
> problem at hand, Dr. Cox's code is the fastest way to go. However, at
> greater windows (say 20) is ineficient. Take a look at the following
> code, I think the second case is the least prone to error.
>
> //START
> clear
> webuse bsales
> line sales t
> generate float salesm5= (l.sales+l2.sales+l3.sales+l4.sales+l5.sales)/5
>
> //First CASE
> tssmooth ma sm2 = l5.sales, window(0 1 4)
> //replace values in obs 2 to 5
> replace sm2 = . in 2
> replace sm2 = . in 3
> replace sm2 = . in 4
> replace sm2 = . in 5
>
> //Second CASE
> //aux ser =sm1
> tssmooth ma sm1 = sales, window(0 1 4)
> generate float salesm5ma = l5.sm1
> //END
>
> Charles
>
> --
> Charles Koss
> http://charlesonnet.blogspot.com
>
>
> On Sat, Apr 9, 2011 at 1:02 PM, Nick Cox <njcoxstata@gmail.com> wrote:
>> gen y = (L1.x + L2.x + L3.x + L4.x + L5.x) / 5
>>
>> !!!
>>
>> On Sat, Apr 9, 2011 at 5:19 PM, Nick Cox <njcoxstata@gmail.com> wrote:
>>> Suppose you have -tsset- your data. Then this is
>>>
>>> gen y = (L1.x + L2.x + L3.x + L4.x + L5.x)
>>>
>>> Nick
>>>
>>> On Sat, Apr 9, 2011 at 4:29 PM, emanuele mazzini
>>>>
>>>> i do have the following problem in generating a new variable: I need
>>>> to generate a variable which takes the value of the average values of
>>>> the five preceding years of another variable that I have in my
>>>> dataset.
>>>> In other words, supposing my new variable is y at time t, I need that
>>>> its value is equal to the average of another variable (say x) from t-1
>>>> to t-5.
>>>>
>>>> Since I am just beginning in using Stata anyone knows how can I deal
>>>> with this or find any help?
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```