¿Cómo crear una nueva columna basada en valores de otras dos columnas?Hola:
Soy usuario de JMP desde hace mucho tiempo y acabo de comenzar a profundizar en las secuencias de comandos y el uso del editor de fórmulas. Tengo una mesa grande (aproximadamente 10.000 filas). Tengo varias columnas de interés:
- Patient_ID: identificador único para cada paciente
- Hora: momento en el que se recolectó la muestra de laboratorio.
- LAB_VALUE: valor del parámetro de laboratorio con 3 posibilidades discretas (NORMAL, LEVE, SEVERO)
- SEXO: Sexo del paciente
Me gustaría crear una nueva columna llamada "ESTADO" basada en lo siguiente:
- Si el valor inicial para Lab_Value = Normal y al menos un valor posterior al inicio es LEVE o SEVERO, entonces marque como "1" en la columna ESTADO
- Si el valor inicial para Lab_Value = Leve y al menos un valor posterior al inicio es SEVERO, entonces marque como "2" en la columna ESTADO
- Si el valor inicial para Lab_Value = Severo y al menos un valor posterior al inicio es LEVE o NORMAL, entonces se marca como "3" en la columna ESTADO
Esto se vuelve un poco complicado porque algunos pacientes abandonan antes de terminar todos los análisis de laboratorio. Algunos pacientes tienen datos hasta el punto final (día 372) y otros no. Por eso resulta difícil escribir un guión.¿Podrías ayudarme a decirme cómo hacer esto? Intenté crear un montón de declaraciones if usando la función de fórmula pero no pude hacerlo funcionar. Cualquier ayuda sería apreciada.
Muchas gracias
Re: ¿Cómo crear una nueva columna basada en valores de otras dos columnas?Querido Jim:
Gracias, esto fue increíblemente útil. No puedo agradecerte lo suficiente. Tu guión funcionó para mí.
Pasé el último día tratando de descubrir cómo agregarlo a tu script. En particular, quiero crear una cuarta categoría para LAB_VALUE. Si el estado del valor de laboratorio de un paciente no cumple con ninguna de las 3 condiciones siguientes, me gustaría marcarlo como cuarta categoría "4".
Intenté agregar ",4)" a la última declaración if, pero no funcionó. El editor de guiones seguía quejándose de que faltaban , o ). O no evaluaría algunas de las filas. Cualquier ayuda que pueda ofrecer será muy apreciada.
@txnelson escribió:
A continuación se muestra una forma de configurar los valores de ESTADO.No es un código muy eficiente, pero debería funcionar.No pude probarlo completamente, pero la lógica es bastante sencilla.
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);Puedo imaginar una forma más eficiente de hacer esto, pero no se implementaría como una fórmula, sino como un script utilizando algunas de las plataformas JMP.
Re: ¿Cómo crear una nueva columna basada en valores de otras dos columnas?A continuación se muestra una forma de configurar los valores de ESTADO.No es un código muy eficiente, pero debería funcionar.No pude probarlo completamente, pero la lógica es bastante sencilla.
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);
Puedo imaginar una forma más eficiente de hacer esto, pero no se implementaría como una fórmula, sino como un script utilizando algunas de las plataformas JMP.