# Re: Re: st: Count variable

 From n j cox To statalist@hsphsun2.harvard.edu Subject Re: Re: st: Count variable Date Wed, 21 Mar 2007 18:51:23 +0000

```Yes and no.

Your version of the code runs (correcting a mistake
pointed out separately):

gen count = 0
by id office : replace count =
cond(_n == 1, 1, 1 + count[_n-1]) if win

That would be wrong if the data are not sorted
-id office electionyear-.

In giving code solutions, it is best not
to make assumptions about -sort- order.
Specifying the -sort- order within code
will do no harm if data are sorted as they
should be, but the converse isn't true.

There are two solutions which I think
are acceptable (modulo use of variations
on -bysort-):

(1)
bysort id office (electionyear) : gen count = 0
by id office : replace count =
cond(_n == 1, 1, 1 + count[_n-1]) if win

(2)
gen count = 0
bysort id office (electionyear) : replace count =
cond(_n == 1, 1, 1 + count[_n-1]) if win

You might prefer (2) on the grounds that -count-
is initialised as 0, regardless of anything else.
I have no objection to that at all -- in fact
it is probably clearer -- but if so, the -sort-
order should be spelled out in the following line.

Nick
n.j.cox@durham.ac.uk

Jeph Herrin

um, I think that first line can be:

gen count = 0

n j cox (corrected)

> Try
>
> bysort id office (electionyear) : gen count = 0
>
> by id office : replace count =
>     cond(_n == 1, 1, 1 + count[_n-1]) if win

> Felipe Botero, modulo a mass of MIME/HTML, asked
>
> I have data on congressional careers and need to create a variable that
> counts the number of *consecutive* terms served in the same office.
>
>
> I used the following code but it didn't do the trick:
>
> sort id office electionyear
>
> by id office: gen count = cond(win==0,0,sum(win))
>
> list id office win count
>
>   +---------------------------------+
>
>   |  id   office    win       count |
>
>   |---------------------------------|
>
>   | 153          1     0          0 |
>   | 153          1     1          1 |
>   | 153          1     0          0 |
>   | 153          1     1          2 |  <-- should start again with 1
>   | 153          1     1          3 |
>   | 153          1     1          4 |
>   +---------------------------------+
>
> The problem is that I need the counter to start back at 1 after each
> occurrence of win==0.

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```