Come creare una nuova colonna in base ai valori di altre due colonne?Ciao:
Sono un utente JMP da molto tempo e ho appena iniziato ad approfondire lo scripting e l'uso dell'editor di formule. Ho una tabella di grandi dimensioni (circa 10.000 righe). Ho diverse colonne di interesse:
- Patient_ID: identificatore univoco per ciascun paziente
- Ora: punto temporale in cui è stato raccolto il campione di laboratorio
- LAB_VALUE: valore per il parametro lab con 3 possibilità discrete (NORMAL, MILD, SEVERE)
- SESSO: sesso del paziente
Vorrei creare una nuova colonna chiamata "STATUS" in base a quanto segue:
- Se il valore di base per Lab_Value = Normale e almeno un valore post-baseline è LEGGERE o GRAVE, contrassegnare come "1" nella colonna STATO
- Se il valore di base per Lab_Value = Lieve e almeno un valore post-basale è SEVERE, contrassegnare come "2" nella colonna STATUS
- Se il valore di base per Lab_Value = Grave e almeno un valore post-baseline è LEGGERO o NORMALE, contrassegnare come "3" nella colonna STATO
Ciò diventa un po’ complicato perché alcuni pazienti abbandonano il test prima di aver completato tutti gli esami di laboratorio. Alcuni pazienti dispongono di dati fino all'endpoint (giorno 372), mentre altri no. Quindi diventa difficile scrivere una sceneggiatura.Potresti aiutarmi a dirmi come farlo? Ho provato a creare una serie di istruzioni if utilizzando la funzione formula ma non sono riuscito a farlo funzionare. Qualsiasi aiuto sarebbe apprezzato.
Grazie molto
Ri: Come creare una nuova colonna in base ai valori di altre due colonne?Caro Jim:
Grazie, è stato incredibilmente utile. Non posso ringraziarti abbastanza. La tua sceneggiatura ha funzionato per me.
Ho passato l'ultimo giorno cercando di capire come aggiungere al tuo script. In particolare voglio creare una quarta categoria per LAB_VALUE. Se lo stato del valore di laboratorio di un paziente non soddisfa nessuna delle 3 condizioni seguenti, vorrei contrassegnarlo come quarta categoria "4".
Ho provato ad aggiungere ",4)" all'ultima istruzione if, ma non avrebbe funzionato. L'editor dello script continuava a lamentarsi della mancanza di , o ). Oppure non valuterebbe alcune righe. Qualsiasi aiuto che puoi offrire sarebbe molto apprezzato.
@txnelson ha scritto:
Ecco un modo per impostare i valori per STATUS.Non è un codice molto efficiente, ma dovrebbe funzionare.Non sono riuscito a testarlo completamente, ma la logica è piuttosto semplice.
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
)
)
)
)
);Posso immaginare un modo più efficiente per farlo, ma non sarebbe implementato come una formula, ma come uno script utilizzando alcune delle piattaforme JMP.
Ri: Come creare una nuova colonna in base ai valori di altre due colonne?Ecco un modo per impostare i valori per STATUS.Non è un codice molto efficiente, ma dovrebbe funzionare.Non sono riuscito a testarlo completamente, ma la logica è piuttosto semplice.
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
)
)
)
)
);
Posso immaginare un modo più efficiente per farlo, ma non sarebbe implementato come una formula, ma come uno script utilizzando alcune delle piattaforme JMP.