Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | "Gerard Solbrig" <gsolbrig@mail.uni-mannheim.de> |
To | <statalist@hsphsun2.harvard.edu> |
Subject | RE: st: Looping within a subset under a certain condition |
Date | Sun, 30 Sep 2012 11:18:06 +0200 |
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/ * * 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/