Warm tip: This article is reproduced from stackoverflow.com, please click
stata

Setting value of variable within each group based on binary choice

发布于 2020-04-03 23:20:22

Consider the following data example where initially I have group and choice variables only:

obs    group  choice  need   coding

1      1      0       car     train
2      1      1       car     car
3      1      0       car     bus
--------------------------------------
4      2      0       bus     train
5      2      0       bus     car
6      2      1       bus     bus
--------------------------------------
7      3      1       train   train
8      3      0       train   car
9      3      0       train   bus
--------------------------------------
10     5      0       car     train
11     5      1       car     car
12     5      0       car     bus
--------------------------------------

If coding on choice is as above, how can I generate the variable need?

I read a related question and some forum articles but have failed to adapt it to my case.

Questioner
garej
Viewed
29
Pearly Spencer 2020-01-31 19:56

The following works for me:

clear
input group choice
1 0 
1 1
1 0
2 0
2 0 
2 1
3 1
3 0 
3 0
5 0
5 1
5 0
end

bysort group: generate coding = _n
label define coding 1 "train" 2 "car" 3 "bus"
label values coding coding

bysort group: generate tag = coding if choice == 1
egen need = max(tag), by(group)
label values need coding

drop tag

Results:

list, sepby(group)

     +---------------------------------+
     | group   choice   coding    need |
     |---------------------------------|
  1. |     1        0    train     car |
  2. |     1        1      car     car |
  3. |     1        0      bus     car |
     |---------------------------------|
  4. |     2        0    train     bus |
  5. |     2        0      car     bus |
  6. |     2        1      bus     bus |
     |---------------------------------|
  7. |     3        1    train   train |
  8. |     3        0      car   train |
  9. |     3        0      bus   train |
     |---------------------------------|
 10. |     5        0    train     car |
 11. |     5        1      car     car |
 12. |     5        0      bus     car |
     +---------------------------------+