Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Eric Booth <ebooth@ppri.tamu.edu> |
To | "<statalist@hsphsun2.harvard.edu>" <statalist@hsphsun2.harvard.edu> |
Subject | Re: st: RE: Creating a new variable via another variable name based on a condition |
Date | Thu, 8 Jul 2010 20:17:32 +0000 |
<> I also reshaped to long but approached it a different (and longer way) than Nick. ********! clear inp firms hrs_owner1 hrs_owner2 hrs_owner3 equity_owner1 equity_owner2 equity_owner3 1 3 2 0 50 25 25 2 2 3 6 25 50 25 3 3 8 . 75 25 . 4 2 . 2 80 . 20 end **reshape** reshape long hrs_owner equity_owner, i(firms) j(ownerid) **find max** bys firms: egen maxhours = max(hrs_owner) **find ties** g main_owner = ownerid if maxhours==hrs_owner bys firms: egen maxequity = max(equity_owner) if !mi(main_owner) **replace main_owner with tied owner with most equity** bys firms: replace main_owner = . if maxequity != equity_owner bys firms (main_owner): replace main_owner = main_owner[1] drop max* ********! but I got a different answer than when I use Nick's solution (translated into my varnames): bysort firms (hrs_ equity_) : gen main = ownerid[_N] If I've translated the varnames correctly, I think Nick's command can assign main ownership to ids with missing data. There might be a better way to fix Nick's solution, but one way looks to be to recode the missings to zero: ******** recode hrs_ equity_ (.=0) bysort firms (hrs_ equity_) : gen main = ownerid[_N] recode hrs_ equity_ (0=.) ******** ~ Eric __ Eric A. Booth Public Policy Research Institute Texas A&M University ebooth@ppri.tamu.edu On Jul 8, 2010, at 2:46 PM, Nick Cox wrote: > (You should -update- to 8.2. It's free.) > > You should -reshape- your data to -long-. Then no loops are required. > > You don't give variable names. I will assume > > Firm identifier: id > Hours worked by owners 1, 2, etc.: hours1, etc. > Equity owned by owners 1, 2, etc.: equity1, etc. > > The -reshape- is > > reshape long hours equity, i(id) > > Then > > rename _j owner > mvencode *, mv(0) override > bysort id (hours equity) : gen main = owner[_N] > > Repeat: no loops. > > Nick > n.j.cox@durham.ac.uk > > Indu Khurana > > Creating a new variable via another variable name based on a condition > > Using stata 8.0. I am trying to create a logical condition which would > copy the name of the variable if satisfied. > > Here is what I have: > > Aim is to identify the main owner. I have generated one variable Main > Owner > I assign value to this variable using maximum no. of hours worked. > > I have information on > 1. Total 10 owners. Sometimes there may be only 1 or 2 owners. > 2. Hours - Number of hours worked per week. > 3. Equity - Equity ownership by each worker. > I have data for 5 years. There are approximately 5000 firms. > > There are 2 issues: > 1. Lets say there are 2 owners (1 and 2) . Owner1 works for 3 hours > and Owner2 works for 2 hours, then I want the variable main owner to > take the value 1. How can I post the name of the variable and not the > value? > 2. Now if the hours worked for the owners are the same I use Equity > ownership as the variable to resolve the tie. In that case owner with > maximum equity ownership becomes the main owner. How to create a loop > for this? > > 1st year data > > > Firms Hrs owner1 Hrs owner2 Hrs owner3 main owner > 1 3 2 0 1 > 2 2 3 6 3 > 3 3 8 . 2 > 4 2 . 2 tie - go to > equity > . > . > . > 5000 > > Firms Equity ownr1 Equity ownr2 Equity owner3 main ownr > 1 50 25 25 1 > 2 25 50 25 3 > 3 75 25 . 2 > 4 80 . 20 1 > . > . > . > 5000 > > > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/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/statalist/faq * http://www.ats.ucla.edu/stat/stata/