
tengo los siguientes datos
patient-id last name first name date of birth value date of measurement
A1 A BC 1900-01-01 1 1900-01-03 0:00
A1 A BC 1900-01-01 2 1900-01-04 0:00
A1 A BC 1900-01-01 3 1900-01-03 0:00
A1 A BC 1900-01-01 2 1900-01-02 0:00
A1 A BC 1900-01-01 1 1900-01-05 0:00
D5 D EF 1900-01-02 4 1900-01-04 0:00
D5 D EF 1900-01-02 5 1900-01-03 0:00
D5 D EF 1900-01-02 4 1900-01-02 0:00
F2 G HI 1900-01-03 6 1900-01-04 0:00
F2 G HI 1900-01-03 5 1900-01-01 0:00
F2 G HI 1900-01-03 6 1900-01-05 0:00
Cada paciente tiene un máximo de 10 filas. Quiero fusionarlo en una sola fila por paciente.
Por ejemplo, los datos anteriores se convierten en:
patient-id last name first name date of birth value1 date of measurement1 value2 date of measurement2 value3 date of measurement3 value4 date of measurement4 value5 date of measurement5 value6 date of measurement6 value7 date of measurement7 value8 date of measurement8 value9 date of measurement9 value10 date of measurement10
A1 A BC 1900-01-01 1 1900-01-03 0:00 2 1900-01-04 0:00 3 1900-01-03 0:00 2 1900-01-02 0:00 1 1900-01-05 0:00
D5 D EF 1900-01-02 4 1900-01-04 0:00 5 1900-01-03 0:00 4 1900-01-02 0:00
F2 G HI 1900-01-03 6 1900-01-04 0:00 5 1900-01-01 0:00 6 1900-01-05 0:00
¿Alguien sabe cómo hacer esto?
Respuesta1
Puedes hacerlo con una columna auxiliar y una tabla dinámica.
- columna auxiliar: agregue una nueva columna en su tabla con fórmula:
=COUNTIF($A$1:A2,A2)
Esto asignará números para cada fecha de medición por ID de paciente
- tabla dinámica:
- agregue columnas constantes (que solo necesita una vez) como "filas"
- agregar la columna recién creada como "columnas"
- agregar columnas para replicar como "valores"
- asegúrese de que "resumir el campo de valor por" esté configurado en "suma" o "promedio" para cada uno de ellos
- establecer el formato de número correcto para las fechas
- esto funciona solo para datos que contienen solo información numérica (= sin texto)
Respuesta2
Una solución alternativa, menos elegante que una Pivot Table y que quizás requiera un poco más de trabajo.
Supongamos que sus datos actuales están en una hoja llamada Old
.
- En
Old
, asegúrese de que los datos estén ordenados por ID del paciente. - De manera similar a la solución de Máté, agregue una columna auxiliar con la fórmula
=COUNTIF($A$1:A2;A2)
Deberías tener algo como esto:
- Crear una nueva hoja (por ejemplo
New
) - Copie las columnas A a D de
Old
aNew
- En
New
, seleccione las columnas A a D, haga clic enDatos > Eliminar duplicados > Ok - Ahora debería tener una línea única por paciente (consulte el área verde a continuación)
Utilice la siguiente captura de pantalla para crear el resto de la hoja:
- El área gris son los encabezados dinámicos. Si los copias/pegas 9 veces a la derecha, se actualizarán automáticamente, del 1 al 10.
- En el área blanca, hay 2 fórmulas: una para obtener el "valor" y otra para obtener la "fecha de medición". También puedes copiarlos y pegarlos a la derecha y se actualizarán automáticamente.
Aquí están los SUMIFS
:
=SUMIFS(Old!$E:$E,Old!$G:$G,E$2,Old!$A:$A,$A4)
=SUMIFS(Old!$F:$F,Old!$G:$G,F$2,Old!$A:$A,$A4)
Nota:Esto también funciona solo con valores numéricos. Para valores no numéricos, únicos para cada medición y paciente, creo que la única solución sería una macro VBA.