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]
Re: st: Loop-within-loop error while looping over observations for a microsimulation
From
Stephen Cranney <[email protected]>
To
[email protected]
Subject
Re: st: Loop-within-loop error while looping over observations for a microsimulation
Date
Mon, 6 Aug 2012 17:31:29 -0600
Thank you all so much, that worked to make the syntax legal. I'm
almost there, but it's not quite doing what I want it to. To recap,
the data is sorted by year and month. When the "birth" is created out
of the binomial function, I want the code to detect it and make a
number of the subsequent months "infertile" so that binomial
probability of births won't work during those months. .f= fertile
missing, .i is missing for after-birth infertility.
"monthsofpostpartum" is a local macro that is simply the number of
months of after-birth infertility. This just gives me a sequence of 1s
and 0s; it doesn't seem to be replacing the subsequent months after
birth with the .i
local N = _N
local monthsofpostpartum = 12
forvalues i = 1/`N' {
forvalues j= 1/`monthsofpostpartum' {
if childbirth[`i']== .f replace childbirth= rbinomial(1, probabilityconceive)
if childbirth[`i']==1 replace childbirth= .i in`N'+`j'
}
}
Thanks in advance,
On Mon, Aug 6, 2012 at 1:45 PM, Nick Cox <[email protected]> wrote:
> You still have a problem.
>
> replace childbirth[_n+j]== .i if (childbirth==1) in `i'
>
> is illegal, as explained.
>
> This kind of statement would be legal
>
> if (childbirth[<subscript>] == 1) replace childbirth = .i in <something>
>
> but I am not certain that it is what you want.
>
> On Mon, Aug 6, 2012 at 8:08 PM, Stephen Cranney
> <[email protected]> wrote:
>> But with the current syntax isn't that not a problem? If I input the
>> numbers directly I have the following:
>>
>> local N = _N
>> forvalues i = 1/`N' {
>> forvalues j= 0/12 {
>>
>> replace childbirth= rbinomial(1, probabilityconceive)
>> if childbirth== .f
>> replace childbirth[_n+j]== .i if (childbirth==1) in `i'
>> }
>> }
>>
>>
>> Here 1/`N' is directly computed before the loop starts, and the j
>> values are inputted directly (with the higher bound being the number
>> of postpartum months), so I'm still not seeing exactly how the syntax
>> has a problem. I've closed off the space that was between childbirth
>> and the _n, so it's not that it's accidentally recognizing the value
>> as a weight.
>>
>> Thanks,
>>
>> Stephen
>>
>> On Mon, Aug 6, 2012 at 11:59 AM, Nick Cox <[email protected]> wrote:
>>>
>>> No "seems to indicate" here: simply, subscripts are not allowed to the
>>> left of the assignment in Stata.
>>>
>>> The syntax diagram shows the form -replace oldvar = exp-. Stuff can
>>> follow that, but nothing else can be included.
>>>
>>> Nick
>>>
>>> On Mon, Aug 6, 2012 at 4:53 PM, Stephen Cranney
>>> <[email protected]> wrote:
>>> > Thanks for catching that; it's still giving me the "weights not
>>> > allowed" error message though, even when I delete the extra space.
>>> >
>>> > I found this prior Statlist post that seems to indicate that Stata
>>> > triggers the no weights allowed warning when the `i' is placed to the
>>> > left of the equals sign:
>>> >
>>> > http://www.stata.com/statalist/archive/2006-08/msg00976.html
>>> >
>>> > So I changed my code to the following, but I'm still getting the "no
>>> > weights allowed" message.
>>> >
>>> > local N = _N
>>> > forvalues i = 1/`N' {
>>> > forvalues j= 0/12 {
>>> > replace childbirth= rbinomial(1, probabilityconceive) if childbirth== .f
>>> > replace childbirth[_n+j]== .i if (childbirth==1) in `i'
>>> > }
>>> > }
>>> >
>>> > Best,
>>> >
>>> >
>>> >
>>> > On Mon, Aug 6, 2012 at 9:32 AM, daniel klein
>>> > <[email protected]> wrote:
>>> >> I did not follow closely, but there is a space between <childbirth>
>>> >> and <[`i']> in your code, probably causing Stata to interpret <[`i']>
>>> >> as some kind of weight, rather than a subscript.
>>> >>
>>> >> Best
>>> >> Daniel
>>> >>
>>> >> --
>>> >> [...]
>>> >> However, when I change the
>>> >> monthsofpostpartum variable to a constant (in this case 12), it's
>>> >> giving me a "weights not allowed" sign.
>>> *
> *
> * 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/
*
* 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/