Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: RE: Creating a new variable via another variable name based on a condition
From
Eric Booth <[email protected]>
To
"<[email protected]>" <[email protected]>
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
[email protected]
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
> [email protected]
>
> 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/