Reputation: 407
I want to repeat drop
variable for next date
in each name
.
Consider the following data frame:
* Example generated by -dataex-. To install: ssc install dataex
clear
input str4 name long date str8 time float drop
"A" 17659 "11:32:41" 1
"A" 17659 "12:32:41" 1
"A" 17659 "13:32:41" 1
"A" 17660 "11:32:41" .
"A" 17660 "12:32:41" .
"A" 17660 "13:32:41" .
"A" 17660 "14:32:41" .
"B" 17659 "11:32:41" .
"B" 17659 "12:32:41" .
"B" 17659 "13:32:41" .
"B" 17659 "14:32:41" .
"B" 17660 "11:32:41" 1
"B" 17660 "12:32:41" 1
"B" 17661 "11:32:41" 1
"B" 17661 "12:32:41" 1
"C" 17659 "11:32:41" 1
"C" 17659 "12:32:41" 1
"C" 17660 "11:32:41" .
"C" 17660 "12:32:41" .
"C" 17660 "13:32:41" .
"C" 17661 "11:32:41" .
"C" 17661 "12:32:41" .
"C" 17661 "13:32:41" .
"C" 17661 "14:32:41" .
end
format %d date
So the result is:
+------+-----------+----------+-------+
| name | date | time | drop |
+------+-----------+----------+-------+
| A | 07may2008 | 11:32:41 | 1 |
| A | 07may2008 | 12:32:41 | 1 |
| A | 07may2008 | 13:32:41 | 1 |
| A | 08may2008 | 11:32:41 | 1 |
| A | 08may2008 | 12:32:41 | 1 |
| A | 08may2008 | 13:32:41 | 1 |
| A | 08may2008 | 14:32:41 | 1 |
| B | 07may2008 | 11:32:41 | |
| B | 07may2008 | 12:32:41 | |
| B | 07may2008 | 13:32:41 | |
| B | 07may2008 | 14:32:41 | |
| B | 08may2008 | 11:32:41 | 1 |
| B | 08may2008 | 12:32:41 | 1 |
| B | 09may2008 | 11:32:41 | 1 |
| B | 09may2008 | 12:32:41 | 1 |
| C | 07may2008 | 11:32:41 | 1 |
| C | 07may2008 | 12:32:41 | 1 |
| C | 08may2008 | 11:32:41 | 1 |
| C | 08may2008 | 12:32:41 | 1 |
| C | 08may2008 | 13:32:41 | 1 |
| C | 09may2008 | 11:32:41 | |
| C | 09may2008 | 12:32:41 | |
| C | 09may2008 | 13:32:41 | |
| C | 09may2008 | 14:32:41 | |
+------+-----------+----------+-------+
Finaly if we use drop if drop == 1
the result is:
+------+-----------+----------+-------+
| name | date | time | drop |
+------+-----------+----------+-------+
| B | 07may2008 | 11:32:41 | |
| B | 07may2008 | 12:32:41 | |
| B | 07may2008 | 13:32:41 | |
| B | 07may2008 | 14:32:41 | |
| C | 09may2008 | 11:32:41 | |
| C | 09may2008 | 12:32:41 | |
| C | 09may2008 | 13:32:41 | |
| C | 09may2008 | 14:32:41 | |
+------+-----------+----------+-------+
Upvotes: 1
Views: 80
Reputation: 407
gen a=0
replace a=1 if(drop[_n]==1 & drop[_n+1]==. & name[_n]==name[_n+1] & _n < _N)
replace a=1 if(drop[_n]==. & drop[_n-1]==1 & name[_n]==name[_n-1] & _n < _N)
bysort name date: egen b=max(a)
sort name date
drop if b==1
drop if drop ==1
drop drop a b
EDIT Nick Cox
gen a = drop==1 & drop[_n+1]==. & name==name[_n+1] & _n < _N
replace a=1 if drop==. & drop[_n-1]==1 & name==name[_n-1] & _n < _N
bysort name date (a): gen b = a[_N]
drop if b==1 | drop ==1
drop drop a b
Upvotes: 2