En el procesamiento de datos clínicos o transaccionales, es frecuente encontrar duplicados "imperfectos". Un caso clásico es cuando un evento (como un tratamiento médico) se registra dos veces: una vez en la fecha de inicio y una vez al día siguiente, creando así dos observaciones para un mismo evento.
Este artículo explora cómo limpiar un conjunto de datos donde cada observación se repite en dos días consecutivos, con el objetivo de eliminar la primera observación (la fecha más antigua) y conservar solo la segunda (la fecha más reciente).
El Problema
Imaginemos un conjunto de datos que contiene las variables id, group y treatmentdate. Cada tratamiento se extiende durante dos días consecutivos, generando dos líneas. Además, un mismo identificador (id) puede tener varios episodios de tratamiento distintos en el tiempo dentro del mismo grupo.
Ejemplo de datos brutos:
| id | group | treatmentdate | Nota |
| A1 | 0 | 30Sep2017 | A eliminar |
| A1 | 0 | 01Oct2017 | A conservar |
| A2 | 1 | 06Nov2017 | A eliminar |
| A2 | 1 | 07Nov2017 | A conservar |
| A1 | 0 | 23Oct2017 | A eliminar (Nuevo episodio para A1) |
| A1 | 0 | 24Oct2017 | A conservar |
Un enfoque ingenuo utilizando PROC SQL con un GROUP BY id, group y MAX(day) fallaría aquí, ya que anularía la distinción entre los diferentes episodios de tratamiento (por ejemplo, para A1, solo mantendría el 24 de octubre y perdería el 1 de octubre).
La Solución Óptima
El método más robusto se basa en el uso del DATA Step combinado con una clasificación inteligente (PROC SORT). La idea es utilizar la función DIF para comparar las fechas entre las líneas, mientras se protegen los cambios de grupo.
Paso 1: La Clasificación (PROC SORT)
El truco consiste en clasificar los datos en orden descendente de fecha. Al colocar la fecha más reciente primero, transformamos el problema: en lugar de "buscar la siguiente línea para ver si es la misma", simplemente podemos comparar la línea actual con la anterior.
