Wie erstelle ich eine neue Spalte basierend auf Werten aus zwei anderen Spalten?Hallo:
Ich bin ein langjähriger JMP-Benutzer und habe gerade begonnen, mich mit der Skripterstellung und der Verwendung des Formeleditors zu befassen. Ich habe eine große Tabelle (ca. 10.000 Zeilen). Ich habe mehrere interessante Spalten:
- Patienten-ID: eindeutige Kennung für jeden Patienten
- Zeit: Zeitpunkt, zu dem die Laborprobe entnommen wurde
- LAB_VALUE: Wert für den Laborparameter mit 3 diskreten Möglichkeiten (NORMAL, MILD, SEVERE)
- SEX: Geschlecht des Patienten
Ich möchte eine neue Spalte mit dem Namen „STATUS“ basierend auf Folgendem erstellen:
- Wenn der Basiswert für Lab_Value = Normal ist und mindestens ein Post-Baseline-Wert MILD oder SEVERE ist, dann markieren Sie ihn als „1“ in der Spalte STATUS
- Wenn der Basiswert für Lab_Value = Mild ist und mindestens ein Post-Baseline-Wert SEVERE ist, dann markieren Sie ihn als „2“ in der Spalte STATUS
- Wenn der Basiswert für Lab_Value = „Schwerwiegend“ ist und mindestens ein Post-Baseline-Wert MILD oder NORMAL ist, dann wird in der Spalte „STATUS“ mit „3“ gekennzeichnet
Dies wird etwas kompliziert, da einige Patienten die Studie abbrechen, bevor alle Laboruntersuchungen abgeschlossen sind. Bei einigen Patienten liegen die Daten bis zum Endpunkt (Tag 372) vor, bei anderen nicht. Daher ist es schwierig, ein Drehbuch zu schreiben.Könnten Sie mir helfen, mir zu erklären, wie das geht? Ich habe versucht, mit der Formelfunktion eine Reihe von if-Anweisungen zu erstellen, konnte es aber nicht zum Laufen bringen. Jede Hilfe wäre dankbar.
Vielen Dank
Betreff: Wie erstelle ich eine neue Spalte basierend auf Werten aus zwei anderen Spalten?Lieber Jim:
Vielen Dank, das war so unglaublich hilfreich. Ich kann Ihnen nicht genug danken. Ihr Skript hat bei mir funktioniert.
Ich habe den letzten Tag damit verbracht, herauszufinden, wie ich an Ihr Skript anhängen kann. Insbesondere möchte ich eine vierte Kategorie für LAB_VALUE erstellen. Wenn der Laborwertstatus eines Patienten keine der drei folgenden Bedingungen erfüllt, möchte ich ihn als vierte Kategorie „4“ kennzeichnen.
Ich habe versucht, „,4)“ zur letzten if-Anweisung hinzuzufügen, aber es hat nicht funktioniert. Der Skripteditor beschwerte sich ständig über fehlende , oder ). Oder es würden einige Zeilen nicht ausgewertet. Wir würden uns über jede Hilfe, die Sie anbieten können, sehr freuen.
@txnelson schrieb:
Hier ist eine Möglichkeit, die Werte für STATUS festzulegen.Es ist kein sehr effizienter Code, aber er sollte funktionieren.Ich konnte es nicht vollständig testen, aber die Logik ist ziemlich einfach.
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
)
)
)
)
);Ich kann mir einen effizienteren Weg vorstellen, dies zu tun, aber er würde nicht als Formel, sondern als Skript unter Verwendung einiger JMP-Plattformen implementiert werden.
Betreff: Wie erstelle ich eine neue Spalte basierend auf Werten aus zwei anderen Spalten?Hier ist eine Möglichkeit, die Werte für STATUS festzulegen.Es ist kein sehr effizienter Code, aber er sollte funktionieren.Ich konnte es nicht vollständig testen, aber die Logik ist ziemlich einfach.
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
)
)
)
)
);
Ich kann mir einen effizienteren Weg vorstellen, dies zu tun, aber er würde nicht als Formel, sondern als Skript unter Verwendung einiger JMP-Plattformen implementiert werden.