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

# Re: st: moving average of the last 55 time points

 From Nick Cox To statalist@hsphsun2.harvard.edu Subject Re: st: moving average of the last 55 time points Date Mon, 30 Jan 2012 10:34:20 +0000

```Juan replied privately to me. As the Statalist FAQ explains, you
should _not_ do this.

I've reinstated the original exchange, without which the discussion
makes little sense.

Nick

On Mon, Jan 30, 2012 at 10:10 AM, Juan J. Fernandez
<jjfgonza@clio.uc3m.es> wrote:>
> Dear Nick,
>
>

> Thank you very much for your prompt response to my post!
>
>
>
> I just tried your suggestion, but I believe that it doesn’t solve the
> problem, at least for my case. –egen , filter() – requires specifying the
> concrete lags. So it can take the moving sum of a fixed set of previous
> years (e.g. last 20 years).

I don't understand what you are getting at here. There is no
difference for a regular panel data setting which you implied in your
first post.

> The first problem is that it doesn´t calculate the average, but just the
> sum. Hence I need the denominator, which is hard to define, because there
> are some isolated missing country-years (so -g = _n-  just takes all years,
> not only those with a value in the IV).

Not so. The -normalise- option gives you a mean.

> The second problem is that –egen , filter() lag() – doesn’t prompt a value
> if there are less effective values than the specified lags. For instance, if
> I specify l(0/30) and for Angola there are no prior 30 values for this IV,
> then egen doesn’t even provide any value for that country.

It's not -egen- that makes that decision; it's -filter()-. It provides
a missing value and the logic is that it can't do what you asked for.
If you want it to do what it can with what is available, that was not

> The third problem is that I cannot combine -egen, filter()- with replace.
> This means that I cannot produce a single variable with values obtained with
> variable lags.

You just need two commands, not one. -replace- some variable with the
result of an -egen- calculation. As you can't combine -tssmooth- with
-replace- in this sense either, this is standard in moving average
calculations.

> I guess I will have to find another solution.

I think you would have got better advice if you had explained your
requirements more fully. The technique in

SJ-7-3  pr0033  . . . . . . . . . . . . . .  Stata tip 51: Events in intervals
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N. J. Cox
Q3/07   SJ 7(3):440--443                                 (no commands)
tip for counting or summarizing irregularly spaced
events in intervals

Nick

Earlier:

Nick Cox

Check out -filter()- from -egenmore- (SSC).

On Mon, Jan 30, 2012 at 8:45 AM, Juan Fernandez

> I am trying to obtain moving averages that take into account the
> previous 55 time points (in this case, years) in a panel data setting.
> However I cannot find any Stata command that can solve the problem. To
> my knowledge, -egen, ma()- doesn't do the trick because it cannot be
> combined with -by-. Moreover, -tssmooth ma, window()- doesn't do it
> either because it is limited in the number of lags it can consider.
>
> Is there any way to calculate a moving average for each case that
> takes into account the last 55 time data points (even if there are
> some isolated missings in a few years)?
>
> The data structure is as follows:
>
> Country                   Year         IV
> 1                              1945       20
> 1                              1946       33
> ...                              ...         ...
> 1                              2000       36
> 2                              1945       31
> 2                              1946       27
> ...                              ...         ...
> 2                              2000       29
>

*
*   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/
```