Tabelle 1 sieht aus wie
| geduldig | Testergebnis 1 | Testergebnis 2 | Testergebnis 3 |
| 1001 | 1 | ein | + |
| 1001 | 2 | b | + |
| 1002 | 1 | c | - - |
| 1003 | 2 | d | - - |
Tabelle 2 sieht aus wie
| geduldig | unerwünschtes Ereignis |
| 1001 | aaa |
| 1002 | aab |
| 1002 | aac |
| 1002 | aad |
| 1003 | bbb |
| 1003 | bbc |
Das Ergebnis, das ich erhalten möchte, sieht aus wie
geduldig Spalte ist eine 'gemeinsam genutzte Spalte' für diese beiden Tabellen)
| geduldig | Testergebnis 1 | Testergebnis 2 | Testergebnis 3 | unerwünschtes Ereignis |
| 1001 | 1 | ein | + | aaa |
| 1001 | 2 | b | + | |
| 1002 | 1 | c | - - | aab |
| | | | | aac |
| | | | | aad |
| 1003 | 2 | d | - - | bbb |
| | | | | bbc |
Könnte mir jemand eine Lösung anbieten (so einfach wie möglich)?
Vielen Dank
Die Aufgabe kann durch Hinzufügen einer Zählerspalte zu beiden Tabellen erfüllt werden, wobei jeweils die Anzahl der wiederholten Werte des Patienten gezählt wird
Dann kann der Join durchgeführt werden, passend zu Patient und Zähler
Schließlich wird die Aufgabe realisiert, indem die Daten wieder auf den Patientensortierwert sortiert und eine kleine Bereinigung durchgeführt werden

Hier ist die JSL, um die Ergebnisse zu erhalten, aber jede Aufgabe innerhalb der JSL kann einfach interaktiv ausgeführt werden
Names Default To Here( 1 );
// Create example data tables
dt1 = New Table( "Table1",
Add Rows( 4 ),
New Column( "patient", character, Set Values( {"1001", "1001", "1002", "1003"} ) ),
New Column( "assay result 1", Character, "Nominal", Set Selected, Set Values( {"1", "2", "1", "2"} ) ),
New Column( "assay result 2", Character( 16 ), "Nominal", Set Values( {"a", "b", "c", "d"} ) ),
New Column( "assay result 3", Character( 16 ), "Nominal", Set Values( {"+", "+", "-", "-"} ) )
);
dt2 = New Table( "Table2",
Add Rows( 6 ),
New Column( "patient", Character, Set Values( {"1001", "1002", "1002", "1002", "1003", "1003"} ) ),
New Column( "adverse event", Character( 16 ), "Nominal", Set Values( {"aaa", "aab", "aac", "aad", "bbb", "bbc"} ) )
);
dt1 << New Column( "counter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1, c = 1 );
If( Lag( :patient ) != :patient,
c = 1,
c
++);
c;
)
);
// Add a counter column to both data tables
dt2 << New Column( "counter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1, c = 1 );
If( Lag( :patient ) != :patient,
c = 1,
c
++);
c;
)
);
// Join the tables matching upon patient and counter
dt3 = dt1 << Join(
With( dt2 ),
Merge Same Name Columns,
By Matching Columns( :patient = :patient, :counter = :counter ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )
);
// Sort the data into patient order
dt3 << sort( by( :patient, :counter ), order( ascending, ascending ), replace table( 1 ) );
// If the data came from only the "With" data table, delete the patient value
dt3:patient[dt3 << get rows where( :match flag == 2 )] = "";
// Clean up the table
dt3 << delete columns( {:Match Flag, :counter} );
Hallo @ VBIR ,
Wie @ txnelson Um die Tabelle genau so aussehen zu lassen, wie Sie sie gezeigt haben, müssten Sie einige Skripte oder mehrere interaktive Schritte ausführen. JMP-Tabellen sind jedoch nicht dafür ausgelegt, Daten auf diese Weise anzuzeigen. Da es sich um Datentabellen handelt, nicht um Tabellenkalkulationen, würde der einfache Join aus Sicht der JMP-Datentabelle so aussehen

Dies liegt daran, dass JMP-Tabellen für Analyse- und Grafikzwecke verwendet werden, während Tabellenkalkulationen dazu dienen, numerische Zusammenfassungen zu erstellen, die leichter zu lesen sind. In der Welt der klinischen Studien werden Daten normalerweise in der im Bild gezeigten Weise gespeichert, sie werden jedoch möglicherweise eher so angezeigt, wie Sie es gezeigt haben.
Das führt zur nächsten Frage: Was ist Ihr Ziel, wenn Sie die verknüpften Daten so anzeigen, wie Sie es uns gegeben haben? Ist es für Berichtszwecke oder planen Sie zusätzliche Grafiken oder Analysen mit dem Ergebnis?
Oh, ich habe vergessen zu erwähnen, dass bei der mehrmaligen Messung eines Assays für einen Patienten jede Messung wirklich eine eigene ID haben sollte, um sicherzustellen, dass unerwünschte Ereignisse (die eine übereinstimmende ID haben würden) ohne mögliche Verwirrung korrekt auf jede Messung ausgerichtet sind ( Wie in meinem Beispiel wurden unerwünschte Ereignisse aaa für Patient 1001 wiederholt, sollten es aber nicht gewesen sein, nehme ich an.
Typischerweise ein Datums- / Zeitstempel (oder Studientag) für unerwünschte Ereignisse und ein Datums- / Zeitstempel (oder Studientag) für jede Messung für jeden Assay. Auf diese Weise wird, wenn die unerwünschten Ereignisse nur für eine der gemeldeten Messungen für jeden Assay gelten sollen, diese korrekt angezeigt. Gleiches gilt für mehrere unerwünschte Ereignisse am selben Tag, an dem das Testergebnis aufgezeichnet wurde. Zum Beispiel:
Tabelle 1
| Geduldig |
Lerntag |
Assay 1 |
Assay 2 |
Assay 3 |
| 1001 |
1 |
1 |
ein |
+ |
| 1001 |
2 |
2 |
b |
+ |
Tabelle 2
| Geduldig |
Lerntag |
Unerwünschtes Ereignis |
| 1001 |
1 |
aaa |
| 1001 |
2 |
|
Tabelle 3 (einfache Verknüpfung mit Patienten- und Studientag als übereinstimmende Spalten und Verwendung der eingeschlossenen Nichtübereinstimmung aus beiden Tabellen)
| Geduldig |
Lerntag |
Assay 1 |
Assay 2 |
Assay 3 |
Unerwünschtes Ereignis |
| 1001 |
1 |
1 |
ein |
+ |
aaa |
| 1001 |
2 |
2 |
b |
+ |
|
Dies verhindert mehrdeutige versehentliche Zuweisungen, die möglicherweise vorgenommen werden, und ermöglicht die Verwendung in JMP für die weitere Analyse und grafische Darstellung. Außerdem wird Zeile 2 in Tabelle 2 beim Beitritt nicht wirklich benötigt, da davon ausgegangen wird, dass am zweiten Studientag keine Ereignisse stattfinden.
@chris_kirchberg Vielen Dank für Ihre Geduld und sehr detaillierte Antworten!
Ich hätte beachten sollen, dass dies ein Beispiel ist, das ich aus der Luft gemacht habe.
Ich möchte nur eine Tabelle erstellen, die wie dieses Beispiel für andere Programmierteams aussieht, damit sie LB und AE vergleichen können, indem sie einfach durch den Bildschirm scrollen.