Hola a todos, tengo una pregunta bastante compleja sobre cómo organizar los datos en jmp.Básicamente, estoy analizando el seguimiento de los pacientes y cuánto tiempo les llevará desarrollar una enfermedad en particular. Tengo 3 columnas de datos. La columna 1 es el código identificable de cada paciente. Casi todos los pacientes se enumeran varias veces en la columna 1, ya que tuvieron múltiples seguimientos. La columna 2 es un código binario sobre si tienen o no la enfermedad (0 = sin enfermedad, 1 = enfermedad) en esa fecha de seguimiento. Y la columna 3 es su fecha de seguimiento.
Lo que quiero hacer es aislar cuando la columna 2 cambia de 0 a 1 por primera vez para cada paciente (esto puede suceder varias veces para cada paciente, ya que podrían haber sido tratados y curados, restableciendo así la enfermedad a 0, por lo que Solo quiero la primera vez 0 -> 1). Necesito ambos valores
porque estoy tomando el promedio de sus fechas de seguimiento correspondientes para aproximarme a la fecha en que dieron positivo para la enfermedad. El resto de los datos no los necesito.
Espero que esto tenga sentido, por favor avíseme si necesito más detalles. Lo siento de antemano si esto no es lo que JMP debe hacer. ¡Gracias!
¿Tiene el paciente solo un valor 0 de enfermedad antes del primer valor de 1 enfermedad o puede haber varios valores 0 antes del primer 1?
Editar:
Aquí hay dos posibles soluciones según los datos:
En el primero, ordene los datos primero por ID de paciente y hora, luego cree dos columnas de fórmula y verifique que debe tener la información que le interesa. Puede haber algunos casos extremos que se perderán (como la última fila).
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(14),
Compress File When Saved(1),
New Column("PatientID",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([1, 1, 1, 1, 2, 2, 1, 3, 3, 3, 3, 1, 1, 1]),
Set Display Width(62)
),
New Column("Status",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0]),
Set Display Width(50)
),
New Column("Time",
Numeric,
"Continuous",
Format("m.d.y h:m", 19),
Input Format("m.d.y h:m"),
Set Values(
[3660718210, 3660718260, 3660718320, 3660718380, 3660718440, 3660718500, 3660718560, 3660718620, 3660718680,
3660718740, 3660718800, 3660718860, 3660718920, 3660718920]
)
)
);
// Sort data table
dt << Sort(By(:PatientID, :Time), Replace Table, Order(Ascending, Ascending));
//add formula columns
dt << New Column("CumSumOfStatus",
Numeric,
"Continuous",
Format("Best", 12),
Formula(Col Cumulative Sum(:Status, :PatientID))
);
//add formula columns
dt << New Column("Check",
Numeric,
"Continuous",
Format("Best", 12),
Formula(
If(Row() == 1, :Status);
If(Lag(:CumSumOfStatus, -1) == 1 & Lag(:PatientID) == :PatientID,
1,
0
);
)
);
El segundo es esperar que el ID del paciente tenga solo un estado 0 antes del primer estado 1, lo que le permite obtener tiempos mínimos para ambos estados mediante el resumen:
//If only one 0 before 1
dt2 = New Table("Untitled",
Add Rows(11),
Compress File When Saved(1),
New Column("PatientID",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3]),
Set Display Width(62)
),
New Column("Status",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]),
Set Display Width(50)
),
New Column("Time",
Numeric,
"Continuous",
Format("m.d.y h:m", 19),
Input Format("m.d.y h:m"),
Set Values(
[3660718380, 3660718560, 3660718860, 3660718920, 3660718920, 3660718440, 3660718500, 3660718620, 3660718680,
3660718740, 3660718800]
)
)
);
dt << Summary(Group(:PatientID), Min(:Time), Subgroup(:Status), Freq("None"), Weight("None"));