Search code examples
stata

How can I delete objects without complete data by using stata


I have a large panel dataset that looks as follows.

 input id age high weight str6 daily_drink
1 10 110 35 water
1 10 110 35 coffee
1 11 120 38 water
1 11 120 38 coffee
1 12 130 50 water
1 12 130 50 coffee
2 11 118 31 water
2 11 118 31 coffee
2 11 118 31 milk
2 12 123 38 water
2 12 123 38 coffee
2 12 123 38 milk
3 10 98 55 water
3 11 116 36 water
3 12 129 39 water
4 12 125 40 water
 
end

However, I would like to use stata to keep objects with complete 10, 11, and 12 age. Looks like this.

id  age high    weight  daily_drink
1   10  110     35      water
1   10  110     35      coffee
1   11  120     38      water
1   11  120     38      coffee
1   12  130     50      water
1   12  130     50      coffee
3   10  98      55      water
3   11  116     36      water
3   12  129     39      water

However, all the rows are without missing data, so I cannot simply delete the row with missing data. Is there any way to do it? Any suggestion will help. Thanks in advance.


Solution

  • You can use bysort and egen for this. Something along the lines of

    bysort id: egen has10 = total(age==10)
    bysort id: egen has11 = total(age==11)
    bysort id: egen has12 = total(age==12)
    keep if (has10 != 0) & (has11 != 0) & (has12 != 0)
    

    should work (untested). See help egen for more info. Install gtools if you have very large data (ssc install gtools) and then replace egen by gegen.