Bookmark and Share

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]

Re: st: spell variable according to a criteria


From   Abhimanyu Arora <abhimanyu.arora1987@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: spell variable according to a criteria
Date   Wed, 4 Apr 2012 21:15:20 +0200

Indeed, thanks a ton as ever.:-)
Abhimanyu

On Wed, Apr 4, 2012 at 9:01 PM, Nick Cox <njcoxstata@gmail.com> wrote:
> One of several great things about -by:- is that more difficult
> problems are really just as easy. You can just write everything in
> terms of
>
> bysort country city (time) :
>
> Nick
>
> On Wed, Apr 4, 2012 at 7:56 PM, Abhimanyu Arora
> <abhimanyu.arora1987@gmail.com> wrote:
>> Thanks very much indeed, Nick, was waiting for your ingenious take on
>> the problem.
>> Cheers
>> Abhimanyu
>>
>> PS-Yes, I was wrangling with sorting for a couple of hours. I still
>> cannot comprehend fully but (different combinations of) sorting does
>> seem to influence the results. In fact I simplified the post as there
>> being just panel var and time, but actually the data is in the
>> mutilevel-form—country, city and time
>>
>> On Wed, Apr 4, 2012 at 8:19 PM, Nick Cox <njcoxstata@gmail.com> wrote:
>>> I can't see a difference here in terms of what Stata will do between
>>> your first and second postings.
>>>
>>> In terms of your original problem, I see no need to -sort- each time
>>> around the loop as no command changes the sort order. In fact I see no
>>> need for a loop here at all.
>>>
>>> The problem appears to be this:
>>>
>>> Within panels, if -event- is 1 and -stretch- is # then -event- == 1 is
>>> the start of a spell with at most an extra # observations afterwards.
>>>
>>> Let's think about an -event- and suppose that -stretch- is 7. Then can
>>> we think of that of starting a count-down: 7, 6, 5, 4, 3, 2, 1, 0.
>>> When we get to 0, the spell is finished. (NASA used to say
>>> "Blast-off".)  But presumably a new -event- can reset the count-down.
>>>
>>> Here is sample code setting up a fake dataset.
>>>
>>> set obs 100
>>> gen panel_id = cond(_n < 51, 1, 2)
>>> bysort panel_id : gen time = _n
>>> gen event = 1 if  runiform() < 0.2
>>> gen stretch = ceil(18 * runiform()) if event == 1
>>>
>>> Now the algorithm is just this:
>>>
>>> bysort panel_id (time) : gen inspell = stretch if _n == 1
>>> by panel_id : replace inspell = max(stretch, inspell[_n-1]-1)  if _n > 1
>>>
>>> Now your spells are defined by -inspell- being >= 0 and not missing.
>>>
>>> Nick
>>>
>>> On Wed, Apr 4, 2012 at 5:06 PM, Abhimanyu Arora
>>> <abhimanyu.arora1987@gmail.com> wrote:
>>>
>>>> I think I managed.
>>>>
>>>> So in the line
>>>> bys panel_identifier:replace event=1 if  stretch[_n-(`i'+1)]>`i' &
>>>> stretch[_n-(`i'+1)]!=. & event==.
>>>>
>>>> I changed to
>>>>
>>>> bys panel_identifier:replace event=1 if  stretch[_n-`=`i'+1']>`i' &
>>>> stretch[_n-`=`i'+1']!=. & event==.
>>>>
>>>> in order to evaluate the local macro at every loop.
>>>
>>> On Wed, Apr 4, 2012 at 5:40 PM, Abhimanyu Arora
>>>
>>>>> I have a (monthly) time indicator and a variable 'stretch'  that
>>>>> identifies the spell of an event. I need to create a dummy in case the
>>>>> event took place or not.
>>>>> Currently event=1 for the start of the event (an missing for the
>>>>> rest). If stretch==1, event should equal 1 for the next time period.
>>>>> If stretch =2 event=1 for 2 more time periods (besides the starting
>>>>> time).
>>>>>
>>>>> I know that stretch ranges from 1 to 18 (but may not have the values
>>>>> in between).
>>>>>
>>>>> When I try without using the following loop (putting in the numbers
>>>>> manually that is), it seems OK, But with the following loop things
>>>>> aren't quite right.
>>>>>
>>>>> local i=0
>>>>> while `i'< 18 {
>>>>> bys panel_identifier:replace event=1 if  stretch[_n-(`i'+1)]>`i' &
>>>>> stretch[_n-(`i'+1)]!=. & event==.
>>>>> sort panel_id time
>>>>> local ++i
>>>>> }
>>>>>
>>>>> Where does the mistake lie?
>>>
>
> *
> *   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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index