Bookmark and Share

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: generate the level series from the growth rate series

From   annoporci <>
Subject   Re: st: generate the level series from the growth rate series
Date   Fri, 04 Jan 2013 23:24:00 +0800


Let me hasten to add that with your lines of code I do not need to introduce tempname variables inside the loop. The whole loop takes only 4 lines. So my previous post is indeed to be discarded. I'll consider the hours I spent on this trivial issue a "learning experience."

with thanks,

Patrick Toche.

On Fri, 04 Jan 2013 19:36:33 +0800, Nick Cox <> wrote:

In your code -change- is ambiguous as between -change2- and -change3-.

Evidently, levels can be reconstructed from changes given an initial value:

. sysuse sp500
(S&P 500)

. gen close2 = close[1] + sum(change)

. assert close == close2

If in your real data you have _percent_ changes (assuming equally
spaced times and no missings or omissions)

gen double level = 100
replace level = level[_n-1] * (1 + pcchange / 100) if _n > 1

This generalises to panels:

bysort panelid (time) : replace level = level[_n-1] * (1 + pcchange /
100) if _n > 1


Patrick Toche <> wrote:


I will take 100 as a starting value to create an index.

In the sp500 example, I used the value from the dataset so I could quickly
check that my calculations were correct, hence:

  replace close2 = 1283.27 in 1

where 1283.27 is the value of "close[_n]" in the dataset.


This must be a very simple question...

I have data for percentage changes and would like to reconstruct the
levels of the variables.

Taking the sp500 dataset, I show below that I can generate the one-period difference series for the level variable "close", with and without tsset. Then I try to reverse-engineer to recover the level variable "close" from
the difference series named "change", but I get stuck.

sysuse sp500
gen change2 = close-close[_n-1] /// method without tsset

gen t=_n
tsset t
gen change3 = close-L.close /// method with tsset

gen close2 = .
replace close2 = 1283.27 in 1 /// assign the first value
replace close2 = close2[_n-1]+change /// try to recover the level

This last step fails.

I'd appreciate your help very much.
*   For searches and help try:

Patrick Toche.
*   For searches and help try:

© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index