Nick & David,
Thank you so much for your help. I tried both solutions. I think I got what
I want from David's code. I just need to reshape the data. I really like
Nick's solution because the simpler, the better. But, I got the result of
all 0 from Nick's solution and I do not know what's wrong. I'd like to learn
more please. Thanks again.
Wanli
-----Original Message-----
From: owner-statalist@hsphsun2.harvard.edu
[mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nick Cox
Sent: Monday, August 14, 2006 7:46 AM
To: statalist@hsphsun2.harvard.edu
Subject: RE: st: number of missing from previous year
Compare my posting made about the same time.
Much though I love loops, I think a simpler
approach using -by:- alone will suffice here.
Nick
n.j.cox@durham.ac.uk
davche@brandeis.edu
> Here's some code that might be helpful. It will handle as
> many years as you
> have, and your panel dataset doesn't have to be balanced.
> Note that it counts
> the number of employees in each firm that are recorded in a
> certain year but
> not in the next year (these will be in the variables
> chg`year'). So, as in your
> example, chg1994, will be 2 for all observations from firm 1.
>
> *create an index variable for tsset (i.e., declare the
> dataset as panel)
> egen index=group(firm personid)
> *get the min and max but one years for all firms
> su year
> local minyear=r(min)
> local maxbutoneyear=r(max)-1
> *create a variable with the max year for each firm
> bysort firm: egen maxyear=max(year)
> *loop through the years
> forval year=`minyear'/`maxbutoneyear' {
> tsset index year
> *create variable if employee is recorded this year but not in
> the next year
> gen miss=(year==`year' & personid!=. & f.personid==. & year<maxyear)
> *count for each firm employees recorded this year but not in
> the next year
> local yearplus1=`year'+1
> bysort firm: egen chg`yearplus1'=sum(miss)
> drop miss
> }
> Thanks for the prompt help. My mistake to imply I only have 2
> years data but
> actually I have 8 years. I think the change should be for 1994 because
> that's when the change occurs. In addition, this may be not
> what I want
> because the code counts number of people change from firm to
> firm. If a
> person retires and never appears in the data, then she is not
> counted in the
> code I think, but should be. Again, I need to count the
> missing persons from
> year to year.
Ada Ma
> bysort firm personid: gen count=_N if year==1993 | year==1994
>
> * Count would equal to 2 if a person is with the same firm for both
> 1993 and 1994, 1 if this person was only with this firm in 1993 or in
> 1994.
>
> bysort firm year: egen changed=total(count) if count==1 & year==1993
>
> variable changed would contain the number of employees who were with
> this firm in 1993, but no longer remain employed with the same
> employer in 1994. it'd be all missing values for this variable in
> 1994.
Wanli Zhao
> > I have panel dataset, which has firm ID, year, and person ID for the
> people
> > working in the firm. I want to calculate the number of
> staff changes for
> the
> > same company for each year. For example, the data is as follows.
> > FIRM YEAR PERSONID
> > 1 1993 2
> > 1 1993 4
> > 1 1993 276
> > 1 1993 23456
> > 1 1993 853
> > 1 1994 2
> > 1 1994 276
> > 1 1994 853
> > 1 1994 3452
> > 1 1994 224
> >
> > I already sort firm and year. As you can see, the change of
> staff for firm
> 1
> > in 1994 should be 2 because only person 2, 276 and 853 are
> retained. I
> only
> > want to count how many persons are missing from previous year. I
> appreciate
> > your kind help.
*
* 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/
*
* 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/