Hallo zusammen, ich habe eine ziemlich komplexe Frage zum Anordnen von Daten in jmp.Grundsätzlich betrachte ich die Nachsorge von Patienten und wie lange es dauert, bis sie eine bestimmte Krankheit entwickeln. Ich habe 3 Datenspalten. Spalte 1 ist der identifizierbare Code jedes Patienten. Nahezu alle Patienten sind in Spalte 1 mehrfach aufgeführt, da sie mehrere Nachuntersuchungen hatten. Spalte 2 ist ein binärer Code darüber, ob sie die Krankheit (0=keine Krankheit, 1=Krankheit) zu diesem Nachuntersuchungsdatum haben oder nicht. Und Spalte 3 ist ihr Folgedatum.
Was ich tun möchte, ist zu isolieren, wenn Spalte 2 zum ersten Mal für jeden Patienten von 0—>1 wechselt (dies kann für jeden Patienten mehrmals passieren, da er behandelt und geheilt werden könnte, wodurch die Krankheit wieder auf 0 zurückgesetzt wird Ich will nur das erste Mal 0 --> 1). Ich brauche beide Werte
weil ich den Durchschnitt ihrer entsprechenden Nachuntersuchungstermine nehme, um das Datum anzunähern, an dem sie positiv für die Krankheit waren. Die restlichen Daten brauche ich nicht.
Ich hoffe, das macht Sinn, bitte lassen Sie es mich wissen, wenn ich es genauer ausführen muss. Entschuldigen Sie im Voraus, wenn dies nicht das ist, was JMP tun soll. Vielen Dank!
Hat der Patient nur einen 0-Krankheitswert vor dem ersten 1-Krankheitswert oder können mehrere 0-Werte vor der ersten 1 liegen?
Bearbeiten:
Hier sind zwei mögliche Lösungen, abhängig von den Daten:
Im ersten sortieren Sie die Daten zuerst nach Patienten-ID und Zeit, erstellen Sie dann zwei Formelspalten und überprüfen Sie, ob die Informationen vorhanden sind, an denen Sie interessiert sind. Es kann einige Randfälle geben, die dies verfehlen (wie die letzte Zeile).
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
);
)
);
Die zweite erwartet, dass patientid nur einen 0-Status vor dem ersten 1-Status hat, was es Ihnen ermöglicht, mithilfe der Zusammenfassung nur die Mindestzeiten für beide Status zu erhalten:
//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"));