Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
st: Looping across observations (forwards and backwards)
From
pedromfn <[email protected]>
To
[email protected]
Subject
st: Looping across observations (forwards and backwards)
Date
Sat, 24 Sep 2011 07:28:46 -0700 (PDT)
Dear statalisters
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);
Does someone know what went wrong?
Thanks very much
Best regards,
Pedro.
--
View this message in context: http://statalist.1588530.n2.nabble.com/Looping-across-observations-forwards-and-backwards-tp6827249p6827249.html
Sent from the Statalist mailing list archive at Nabble.com.
*
* 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/