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 at the end of May, and its replacement, statalist.org is already up and running.


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

Re: st: Looping within a subset under a certain condition


From   Phil Clayton <philclayton@internode.on.net>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Looping within a subset under a certain condition
Date   Sun, 30 Sep 2012 20:24:40 +1000

replace rep_ins = 1 in [`z']

Should be:
replace rep_ins = 1 in `z'

(and the same for the other -replace- command)

Phil

On 30/09/2012, at 8:17 PM, Gerard Solbrig wrote:

> I understand. That's what I did in an earlier version of the loop, where I
> subscripted both, -rep- and -trandate- in my loop, but then Stata returned: 
> 
> '[' invalid obs no
> r(198);
> 
> Why is that? That's why I got rid of it in the first place. But without the
> subscript, the loop does not seem to finish running.
> 
> 
> -----Original Message-----
> From: owner-statalist@hsphsun2.harvard.edu
> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nick Cox
> Sent: Sonntag, 30. September 2012 11:59
> To: statalist@hsphsun2.harvard.edu
> Subject: Re: st: Looping within a subset under a certain condition
> 
> This can't be right, if only because you are misunderstanding what the
> -if- command does. Stata treats
> 
> if rep == 1
> 
> as if it were
> 
> if rep[1] == 1
> 
> See
> 
> FAQ     . . . . . . . . . . . . . . . . . . . . .  if command vs. if
> qualifier
>        . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  J.
> Wernow
>        6/00    I have an if command in my program that only seems
>                to evaluate the first observation, what's going on?
>                http://www.stata.com/support/faqs/lang/ifqualifier.html
> 
> The context of looping over observations makes no difference here. You
> probably intend
> 
> if rep[`i'] == 1
> 
> Similar comment w.r.t.
> 
> if trandate ...
> 
> where -trandate- _must_ be subscripted.
> 
> 
> On Sun, Sep 30, 2012 at 10:18 AM, Gerard Solbrig
> <gsolbrig@mail.uni-mannheim.de> wrote:
>> That sure is correct. Please see my reply to Pengpeng on that matter. 
>> So far, I've only focused on getting the rep_ins indicator to work at 
>> all, but multiple windows for one firm is an additional concern. 
>> Ideally, a code would indicate for each rep = 0 case within which of 
>> these windows the observation's 'trandate' lies...
>> 
>> Here's the last version of my code (without inclusion of your earlier 
>> suggestion and the multiple window problem):
>> 
>> forvalues x = 1/`max' {
>>        summarize obs, meanonly
>>        local N = r(N)
>>        forvalues i = 1/`N' {
>>                if rep == 1 {
>>                local r = `i'
>>                local s = `i'+1
>>                forvalues z = `s'/`N' {
>>                        if trandate >= wind_start[`r'] & trandate <= 
>> wind_end[`r'] {
>>                        replace rep_ins = 1 in [`z']
>>                        }
>>                        else {
>>                        replace rep_ins = 0 in [`z']
>>                        }
>>                }
>>        }
>> }
>> }
>> replace rep_ins = . if rep == 1
>> 
>> 
>> 
>> -----Original Message-----
>> From: owner-statalist@hsphsun2.harvard.edu
>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nick Cox
>> Sent: Sonntag, 30. September 2012 11:10
>> To: statalist@hsphsun2.harvard.edu
>> Subject: Re: st: Looping within a subset under a certain condition
>> 
>> The other thing I wasn't clear on your rules for combining two or more 
>> windows for the same firm. The code example I gave just uses the 
>> overall range of the windows, but that would include any gaps between 
>> windows. Thus if a < b < c < d and there are windows [a,b] and [c,d] 
>> then the combined window [a, d] includes a gap [b, c].
>> 
>> On Sun, Sep 30, 2012 at 9:56 AM, Gerard Solbrig 
>> <gsolbrig@mail.uni-mannheim.de> wrote:
>>> My bad, sorry! Of course, the observation 5apr2004 should not be 
>>> considered in the window, as it lies outside of the range between 
>>> 'wind_start' and 'wind_end'. Despite, it seems you've understood my
>> problem correctly.
>>> 
>>> I'll try to incorporate your suggestion into a solution and see 
>>> whether it helps finding a solution. I will post an update on the 
>>> matter
>> later.
>>> 
>>> Thanks so far!
>>> 
>>> 
>>> -----Original Message-----
>>> From: owner-statalist@hsphsun2.harvard.edu
>>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nick Cox
>>> Sent: Sonntag, 30. September 2012 01:13
>>> To: statalist@hsphsun2.harvard.edu
>>> Subject: Re: st: Looping within a subset under a certain condition
>>> 
>>> I had another look at this. I still don't understand your problem 
>>> exactly (e.g. why is the second obs at 5apr2004 considered in 
>>> window), but the technique here may help.
>>> 
>>> egen first_start = min(wind_start), by(firm_id) egen last_end = 
>>> max(wind_end), by(firm_id)
>>> 
>>> gen in_window = inrange(date, first_start, last_end)
>>> 
>>> egen all_0_in_window = min(in_window) if rep == 0, by(firm_id)
>>> 
>>> On the last line: on all <=> min, any <=> max, see
>>> 
>>> FAQ     . . Creating variables recording whether any or all possess some
>>> char.
>>>        . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N.
> J.
>>> Cox
>>>        2/03    How do I create a variable recording whether any
>>>                members of a group (or all members of a group)
>>>                possess some characteristic?
>>>                http://www.stata.com/support/faqs/data/anyall.html
>>> 
>>> Nick
>>> 
>>> On Fri, Sep 28, 2012 at 9:45 PM, Gerard Solbrig 
>>> <gsolbrig@mail.uni-mannheim.de> wrote:
>>>> 
>>>> I'm encountering a problem for which I seek your help.
>>>> 
>>>> Let me start off with an example from my data (what I want it to 
>>>> look like in the end), before I explain my particular problem.
>>>> 
>>>> firm_id date            rep     wind_start              wind_end
>>>> rep_ins
>>>> 
>>>> firm1           01jan2000       0       .                       .
>>>> 0
>>>> firm1           05apr2004       0       .                       .
>>>> 1
>>>> firm1           01nov2004       1       05may2004
> 30may2005
>>>> .
>>>> firm1           10dec2004       0       .                       .
>>>> 1
>>>> firm1           01jan2006       0       .                       .
>>>> 0
>>>> firm2           30dec1999       1       03jul1999
> 27jul2000
>>>> .
>>>> firm2           05jan2000       1       09jul1999
> 02aug2000
>>>> .
>>>> firm2           06jun2000       0       .                       .
>>>> 1
>>>> 
>>>> Each firm in my data has a 'firm_id'. Variable 'date' refers to an 
>>>> event date. The 'rep' dummy indicates the type of event.
>>>> I set 'wind_start' and 'wind_end' as period around the event 
>>>> (-180days,+210days), in case it's a rep = 1 type event.
>>>> 
>>>> Now, I would like the 'rep_ins' dummy to indicate (i.e., rep_ins = 
>>>> 1), whether the date of all other observations of this firm (where 
>>>> rep =
>>>> 0) lies within the range determined by 'wind_start' and 'wind_end'
>>>> (which is conditional upon the 'rep' dummy).
>>>> 
>>>> I've come across looping over observations and tried to design a 
>>>> solution for this problem based on that, but failed to do so. I 
>>>> assume the solution also depends on sorting the data in a special way.
>>>> 
>>>> Here's the first part of my .do-file:
>>>> 
>>>> gen wind_start = date-180 if rep == 1 gen wind_end = date+210 if rep 
>>>> == 1 format wind_start %d format wind_end %d gsort +cusip6 +date
>>>> +trandate gen rep_ins = 0 if rep != 1
>>>> 
>>>> I tried to come up with a solution by adding variables 'per_start'
>>>> and 'per_end' for all rep = 0:
>>>> 
>>>> gen per_start = date-180 if rep == 0 gen per_end = date+180 if rep 
>>>> == 0 format per_start %d format per_end %d
>>>> 
>>>> To mark the period within which the rep = 1 event can lie. Maybe 
>>>> this could contribute to finding a solution as well.
>>> *
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/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/faqs/resources/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/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


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