| 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