> -----Original Message-----
> From: Susan Lewis [mailto:slewis@creditsights.com]
> Sent: Tuesday, July 16, 2002 1:19 PM
> To: statalist@hsphsun2.harvard.edu
> Subject: st: Trailing 60-day standard deviation
>
>
> Seems I must be missing something obvious, but I can't find a
> compact way to calculate a trailing
> 60-day standard deviation. Data are in long format as follows:
>
> Entity 1 Day 1 Value
> Entity 1 Day 2 Value
> Entity 1 Day 3 Value
> .
> .
> .
> Entity 1 Day 365 Value
> Entity 2 Day 1 Value
> Entity 2 Day 2 Value
> .
> .
> .
> Entity 100 Day 365 Value
>
> Goal is to end up with:
>
> Entity 1 Day 1 Value (missing)
> Entity 1 Day 2 Value (missing)
> .
> .
> .
> Entity 1 Day 364 Value SD ENTITY 1 DAYS 304-364
> Entity 1 Day 365 Value SD ENTITY 1 DAYS 305-365
> .
> .
> .
> Entity 100 Day 365 Value SD ENTITY 100
> DAYS 305-365
>
> Any advice would be greatly appreciated.
Not so obvious - I don't think there's an official way to do it. But I
believe the following gives you what you want:
gen sum1=0
gen sum2=0
gen entity2=entity^2
sort year day
forval i=0/59 {
qui by year: replace sum1=sum1+entity[_n-`i']
qui by year: replace sum2=sum2+entity2[_n-`i']
}
gen sd_lag60 = sqrt( (1/59) * (sum2 - (sum1^2)/60) )
Basically, this creates x and x^2, then creates sum1 and sum2 in the
-forvalues- loop, which are the sum of (x) and the sum of (x^2) for the
sixty lagged observations. Then the standard deviation is easy to
calculate.
Nick Winter
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/