Kelly asked
> How can I write a fundction that calculates the change between
successive
> observations of 10 elements of this variable? Ie. Assume the data is
> sorted by date, decending. The first observation is
> (Var1[_n] -Var1[_n+10])/Var[_n+10], the second observation is
> (Var1[_n+2]-Var1[_n+11])/Var1[_n+11], and so on...Is this an instance
> where I can use the -rolling- command? If so, how?
and R.E. replied
local i=10
while `i'<_N { //"_N" is the number of observations
replace myvar = (Var[_n]-Var[_n+`i'])/Var[_n+`i']) if _n=(`i'-9)
local i=`i'+1
}
The original formula is very strange; normally we calculate a change
as the difference between now and a while ago, not the other way
around. That is, to calculate a year-over-year price change from
monthly data, I would do
infl_t = ( P_t - P_{t-12} ) / P_{t-12}
But presuming Kelly really wants what she says, and that these are
time series data (or could be tsset as such) a more Stataish way to
do that would be something like
webuse wpi1
g wpid = (wpi - F10.wpi)/F10.wpi
which will avoid the explicit "while" loop (always a good idea). In
fact one would never need the explicit loop; you could do
g wpid = (wpi - wpi[_n+10] ) / wpi[_n+10]
but I would much rather use the time series operators. They don't
make mistakes.
If you want to loop this calculation, just put the variable names in
a local macro and use a foreach loop. Or, if they are numbered x1-
x100, use a forvalues loop, e.g.