2017-04-19 4 views
0

Mein-Datensatz basiert Löschen besteht aus einer Anzahl von Variablen:Stata: Duplikate zu Terminen

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input float(v1 v2) str11 Date float(v4 v5 v6 v7 v8) 
1 2 "15-aug-2016" 1 1 1 1 1 
1 2 "07-may-2015" 1 1 1 1 50 
1 2 "07-may-2015" 1 1 1 1 88 
1 2 "15-aug-2016" 1 1 1 1 29 
end 

Die Variable date ist ein Datum und Zeit und ist als Datums

generate double date = date(Date,"DMY")

Meine formatiert Duplikate sind für v1-v2-v4-v5-v6-v7 (wie im Beispiel) gleich, während v8 anders ist.

Ich muss Duplikate basierend auf v1-v2-v4-v5-v6-v7 löschen und die mit dem kleinsten Datum (hier 07-Mai-2015) behalten.

Ich habe ohne Erfolg versucht:

1.

gsort -date 
bysort v1 v2 v4 v5 v6 v7: generate dublet=_n 
order dublet date 
keep if dublet==1 
drop dublet 

-> für die ersten 25 Reihen Works oder so, dann ein paar Mal die falsche hält und dann wieder die richtige . (Scheint mir, dass der bysort Befehl entfernt die Art von gsort getan Alle wissen, ob das stimmt?)

  1. bysort v1 v2 v4 v5 v6 v7 (date) : keep if _n == _N

-> Offensichtlich hält der falsche, da Date nicht -Date ist. jedoch -Date ist keine Option - Stata schreibt: - invalid name

+0

'bysort' macht Ihre' gsort' in Ihrem Code sicher rückgängig. Anstatt das letzte Datum zu behalten, das Sie behalten können, müssen Sie vor dem Sortieren weder direkt noch indirekt eine Variable negieren. –

Antwort

2

Sie könnten Ihre zweite Antwort auf bysort v1 v2 v4 v5 v6 v7 (date) : keep if _n == 1 ändern, und das sollten Sie geben, was Sie suchen.

Da es in Ihrem Datenbeispiel doppelte Daten gibt (2 Beobachtungen sind der 7. Mai 2015), erhalten Sie eine zufällige der Beobachtungen mit dem Mindestdatum.

+0

Vielen Dank! Das hat den Job gemacht. Und OK über die beiden mit 07-Mai-2015! – Msh