Ciao a tutti, ho una domanda piuttosto complessa su come organizzare i dati in jmp.Fondamentalmente sto esaminando il follow-up del paziente e quanto tempo impiegheranno a sviluppare una particolare malattia. Ho 3 colonne di dati. La colonna 1 è il codice identificabile di ciascun paziente. Quasi tutti i pazienti sono elencati più volte nella colonna 1 poiché hanno avuto più follow-up. La colonna 2 è un codice binario che indica se hanno o meno la malattia (0=nessuna malattia, 1=malattia) a quella data di follow-up. E la colonna 3 è la loro data di follow-up.
Quello che voglio fare è isolare quando la colonna 2 cambia da 0—>1 per la prima volta per ogni paziente (questo può accadere più volte per ogni paziente poiché avrebbero potuto essere trattati e curati, reimpostando così la malattia a 0, quindi Voglio solo la prima volta 0-->1). Ho bisogno di entrambi i valori
perché sto prendendo la media delle loro date di follow-up corrispondenti per approssimare la data in cui erano positivi per la malattia. Il resto dei dati non mi serve.
Spero che questo abbia senso, per favore fatemi sapere se ho bisogno di approfondire. Ci scusiamo in anticipo se questo non è ciò che JMP dovrebbe fare. Grazie!
Il paziente ha solo un valore di malattia 0 prima del primo valore di malattia o possono esserci più valori 0 prima del primo 1?
Modificare:
Ecco due possibili soluzioni a seconda dei dati:
Nel primo ordina i dati prima per idpaziente e ora, quindi crea due colonne formula e controlla che dovrebbero avere le informazioni che ti interessano. Potrebbero esserci alcuni casi limite che mancheranno (come l'ultima riga).
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
);
)
);
Il secondo si aspetta che l'idpaziente abbia solo uno stato 0 prima del primo stato 1, il che consente di ottenere solo i tempi minimi per entrambi gli stati utilizzando il riepilogo:
//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"));