id | wave | question1 |
01 | 7 | a |
01 | 8 | a |
01 | 9 | a |
02 | 7 | b |
02 | 8 | a |
03 | 7 | b |
03 | 8 | b |
03 | 9 | c |
04 | 7 | a |
05 | 7 | c |
05 | 8 | b |
I want to keep id number 01 and 03 who responds all in those waves.
How can I get them?
id | wave | question1 |
01 | 7 | a |
01 | 8 | a |
01 | 9 | a |
02 | 7 | b |
02 | 8 | a |
03 | 7 | b |
03 | 8 | b |
03 | 9 | c |
04 | 7 | a |
05 | 7 | c |
05 | 8 | b |
. bysort id: g flag=1 if (_N-_n)==2 (9 missing values generated) . bysort id: replace flag=1 if flag[1]==1 (4 real changes made) . sum wave if flag==1 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- wave | 6 8 .8944272 7 9
if flag==1
clear input str2 id wave str1 question1 01 7 a 01 8 a 01 9 a 02 7 b 02 8 a 03 7 b 03 8 b 03 9 c 04 7 a 05 7 c 05 8 b end bysort id : keep if _N == 3 list, sepby(id) +----------------------+ | id wave questi~1 | |----------------------| 1. | 01 7 a | 2. | 01 8 a | 3. | 01 9 a | |----------------------| 4. | 03 7 b | 5. | 03 8 b | 6. | 03 9 c | +----------------------+
. set obs 2 . g id=_n . expand 2 . bysort id: g wave=_n . g A=runiform()*1000 . replace A = . in 2 . egen flag=rowmiss( A) . bysort id: egen check=total(flag) . list +-------------------------------------+ | id wave A flag check | |-------------------------------------| 1. | 1 1 71.10509 0 1 | 2. | 1 2 . 1 1 | 3. | 2 1 555.1031 0 0 | 4. | 2 2 875.991 0 0 | +-------------------------------------+
bysort id : gen incomplete = _N < 3
id | wave | employment status | |
1 | 1 | unemployment-->employment | |
1 | 2 | employment--> maternity leave | |
2 | 6 | employment -->employment | |
2 | 7 |
|
|
2 | 8 |
|
|
3 | 1 | employment-->maternity leave | |
3 | 2 | maternity leave-->employment | |
3 | 4 | employment-->employment |
Comment