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.

# st: RE: Looping within a subset under a certain condition

 From "Gerard Solbrig" To Subject st: RE: Looping within a subset under a certain condition Date Sat, 29 Sep 2012 01:31:15 +0200

```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']
}
}

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.

All input is welcome. Thanks in advance.
Best,
Gerard Solbrig

*
*   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/
```