Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

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

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Looping across observations (forwards and backwards) |

Date |
Sat, 24 Sep 2011 16:18:04 +0100 |

A different comment is that it is much easier to go forwards in Stata than backwards. So, reversing the whole dataset, and defining spells "started" in a certain way might be easier. When all is done you reverse it again. Reversing is easy gen neworder = -_n sort neworder On Sat, Sep 24, 2011 at 4:07 PM, Nick Cox <njcoxstata@gmail.com> wrote: > When your program gets to > > replace sinalt=`sinal' in `i' > > evidently `sinal' is undefined so Stata sees > > replace sinalt= in `i' > > It tries first to interpret -in- as the name of a variable or scalar, > fails, and aborts with error. > > Perhaps when you coded > > if cod[j]==1 { > > you meant > > if cod[`j']==1 { > > On Sat, Sep 24, 2011 at 3:28 PM, pedromfn <nakashimapedro@gmail.com> wrote: > >> My database looks like: >> >> obs cod pr qt sinalt >> 1 1 1.4 100 . >> 2 2 1.5 100 . >> 3 1 1.5 95 . >> 4 1 1.4 100 . >> 5 3 1.5 100 . >> >> and I want to replace observations of sinalt in which cod==3, according to >> the following rule: >> 1) Go across observations looking for observations in which cod=3 >> 2) In the above example, the first observation is observation 5, in which >> pr[5]=1.5 and qt[5]=100. Once that observation was found, go backwards >> through observations looking for the first observation j in which >> pr[j]==pr[5] & qt[j]==qt[5]. In the example, j=2. >> 3) Replace sinalt[5]=`sinal' , where the macro sinal is defined as: >> if cod[j]==1, store in the local sinal the value 1 >> if cod[j]==2, store in the local sinal the value -1 >> 4) Once last replace was done, look for the next observation in which cod==3 >> and do the same thing. >> >> I wrote the following do-file, but it didn't work: >> >> forvalues i=1/`=_N' { >> if cod[`i']==3{ >> local j=`i'-1 >> if pr[`j']==pr[`i'] & qt[`j']==qt[`i'] { >> if cod[j]==1 { >> local sinal 1 >> } >> else if cod[`j']==2 { >> local sinal -1 >> } >> else { >> local sinal >> } >> } >> else { >> while pr[`j']!=pr[`i'] | qt[`j']!=qt[`i'] { >> local --j >> } >> } >> replace sinalt=`sinal' in `i' >> } >> } >> >> ERROR: >> in not found >> r(111); > * * 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/

**References**:**st: Looping across observations (forwards and backwards)***From:*pedromfn <nakashimapedro@gmail.com>

**Re: st: Looping across observations (forwards and backwards)***From:*Nick Cox <njcoxstata@gmail.com>

- Prev by Date:
**Re: st: Re: string functions quotation marks** - Next by Date:
**Re: st: Re: string functions quotation marks** - Previous by thread:
**Re: st: Looping across observations (forwards and backwards)** - Next by thread:
**st: Re: Looping across observations (forwards and backwards)** - Index(es):