Bei der Verarbeitung klinischer oder transaktionaler Daten treten häufig "unvollständige" Duplikate auf. Ein klassischer Fall ist, dass ein Ereignis (wie eine medizinische Behandlung) zweimal erfasst wird: einmal am Startdatum und einmal am Folgetag, wodurch zwei Beobachtungen für dasselbe Ereignis entstehen.
Dieser Artikel untersucht, wie ein Datensatz bereinigt werden kann, bei dem jede Beobachtung an zwei aufeinanderfolgenden Tagen wiederholt wird, mit dem Ziel, die erste Beobachtung (das älteste Datum) zu entfernen und nur die zweite (das jüngste Datum) beizubehalten.
Das Problem
Stellen wir uns einen Datensatz vor, der die Variablen id, group und treatmentdate enthält. Jede Behandlung erstreckt sich über zwei aufeinanderfolgende Tage und erzeugt zwei Zeilen. Darüber hinaus kann eine einzige Kennung (id) innerhalb derselben Gruppe mehrere unterschiedliche Behandlungszeiträume haben.
Beispiel für Rohdaten:
| id | group | treatmentdate | Hinweis |
| A1 | 0 | 30Sep2017 | Zu löschen |
| A1 | 0 | 01Oct2017 | Zu behalten |
| A2 | 1 | 06Nov2017 | Zu löschen |
| A2 | 1 | 07Nov2017 | Zu behalten |
| A1 | 0 | 23Oct2017 | Zu löschen (Neue Episode für A1) |
| A1 | 0 | 24Oct2017 | Zu behalten |
Ein naiver Ansatz unter Verwendung von PROC SQL mit einem GROUP BY id, group und MAX(day) würde hier fehlschlagen, da er die Unterscheidung zwischen den verschiedenen Behandlungszeiträumen überschreiben würde (z.B. für A1 würde er nur den 24. Oktober behalten und den 1. Oktober verlieren).
Die optimale Lösung
Die robusteste Methode basiert auf der Verwendung des DATA Step in Kombination mit einer intelligenten Sortierung (PROC SORT). Die Idee ist, die Funktion DIF zu verwenden, um die Daten zwischen den Zeilen zu vergleichen, während Gruppenwechsel geschützt werden.
Schritt 1: Die Sortierung (PROC SORT)
Der Trick besteht darin, die Daten in absteigender Reihenfolge nach Datum zu sortieren. Indem das jüngste Datum zuerst platziert wird, verwandeln wir das Problem: Anstatt "nach der nächsten Zeile zu suchen, um zu sehen, ob sie gleich ist", können wir einfach die aktuelle Zeile mit der vorherigen vergleichen.
