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]

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: RE: Looping within a subset under a certain condition |

Date |
Sat, 29 Sep 2012 10:18:23 +0100 |

Have a look at SJ-7-3 pr0033 . . . . . . . . . . . . . . Stata tip 51: Events in intervals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N. J. Cox Q3/07 SJ 7(3):440--443 (no commands) tip for counting or summarizing irregularly spaced events in intervals which is accessible to all at http://www.stata-journal.com/sjpdf.html?articlenum=pr0033 On Sat, Sep 29, 2012 at 2:38 AM, Nick Cox <njcoxstata@gmail.com> wrote: > Stata, not STATA. > > I don't understand what you are trying to do but > > local r = obs[`i'] if rep[`i'] == 1 > local z = `i'+1 if rep[`i'] == 1 > > makes no sense. What you mean is perhaps > > if rep[`i'] == 1 { > local r = obs[`i'] > local z = `i'+1 > } > > On Sat, Sep 29, 2012 at 12:31 AM, Gerard Solbrig > <gsolbrig@mail.uni-mannheim.de> wrote: >> This is what I have come up with so far, but for the second -forvalues- >> loop, STATA tells me that "invalid syntax r(198)"! >> I guess the problem lies with the local macro z, but I'm not sure. >> Any troubleshooting idea? I'm not even sure if that get's me where I want to >> go... >> >> gen rep_ins = . >> gsort +firm_id -rep >> by firm_id: gen obs = _n >> gen group_obs = _n >> sort firm_id >> by firm_id (group_obs): replace group_obs = group_obs[1] >> by group_obs, sort: gen group = _n == 1 >> replace group = sum(group) >> summarize group, meanonly >> local max = r(max) >> forvalues x = 1/`max' { >> local N`x' = obs[_N] >> } >> /*how to make the counting macro for the forvalues look dynamic by firm_id >> group? */ >> /* works fine up to here! */ >> >> forvalues i = 1/`N`x'' { >> local r = obs[`i'] if rep[`i'] == 1 >> local z = `i'+1 if rep[`i'] == 1 >> if trandate[`z'] >= wind_start[`r'] & trandate[`z'] <= >> wind_end[`r'] { >> replace rep_ins = 1 in [`z'] >> } >> else { >> replace rep_ins = 0 in [`z'] >> } >> } >> >> Thanks in advance. >> Best, >> Gerard Solbrig >> >> >> -----Original Message----- >> From: Gerard Solbrig [mailto:gsolbrig@mail.uni-mannheim.de] >> Sent: Freitag, 28. September 2012 22:45 >> To: 'statalist@hsphsun2.harvard.edu' >> Subject: Looping within a subset under a certain condition >> >> Dear Statalist-Members, >> >> 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 +firm_id +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/

**References**:**st: RE: Looping within a subset under a certain condition***From:*"Gerard Solbrig" <gsolbrig@mail.uni-mannheim.de>

**Re: st: RE: Looping within a subset under a certain condition***From:*Nick Cox <njcoxstata@gmail.com>

- Prev by Date:
**Re: st: -beep- command gone?** - Next by Date:
**Re: st: dynamic graphs** - Previous by thread:
**Re: st: RE: Looping within a subset under a certain condition** - Next by thread:
**Re: st: RE: Looping within a subset under a certain condition** - Index(es):