La tabella 1 assomiglia
| paziente | risultato del test 1 | risultato del test 2 | risultato del test 3 |
| 1001 | 1 | UN | + |
| 1001 | 2 | B | + |
| 1002 | 1 | C | - |
| 1003 | 2 | D | - |
La tabella 2 assomiglia
| paziente | evento avverso |
| 1001 | aaa |
| 1002 | aab |
| 1002 | aac |
| 1002 | aad |
| 1003 | bbb |
| 1003 | BBC |
Il risultato che voglio ottenere è simile a:( paziente è una "colonna condivisa" per queste due tabelle)
| paziente | risultato del test 1 | risultato del test 2 | risultato del test 3 | evento avverso |
| 1001 | 1 | UN | + | aaa |
| 1001 | 2 | B | + | |
| 1002 | 1 | C | - | aab |
| | | | | aac |
| | | | | aad |
| 1003 | 2 | D | - | bbb |
| | | | | BBC |
Qualcuno potrebbe darmi una soluzione (il più semplice possibile)?
Grazie
@Chris_Kirchberg grazie per la pazienza e le risposte molto dettagliate!
Avrei dovuto notare che questo è un esempio che ho fatto dal nulla.
Voglio solo creare una tabella simile a questo esempio per altri compagni di team di programmazione in modo che possano confrontare LB e AE scorrendo facilmente lo schermo.
Oh, ho dimenticato di menzionare che, quando si misura un test più volte per un paziente, ciascuna misurazione dovrebbe avere il proprio ID per assicurarsi che vi sia un corretto allineamento degli eventi avversi (che avrebbero un ID corrispondente) a ciascuna misurazione senza possibile confusione ( come nel mio esempio, l'evento avverso aaa è stato ripetuto per il paziente 1001, ma presumo non avrebbe dovuto essere così.
Solitamente un indicatore di data-ora (o giorno di studio) per l'evento avverso e un indicatore di data-ora (o giorno di studio) per ciascuna misurazione per ciascun test. In questo modo, se si suppone che gli eventi avversi riguardino solo una delle misurazioni riportate per ciascun test, verranno visualizzati correttamente. Lo stesso per più eventi avversi per lo stesso giorno in cui è stato registrato il risultato del test. Per esempio:
Tabella 1
| Paziente |
Giornata di studio |
Saggio 1 |
Saggio 2 |
Saggio 3 |
| 1001 |
1 |
1 |
UN |
+ |
| 1001 |
2 |
2 |
B |
+ |
Tavolo 2
| Paziente |
Giornata di studio |
Evento avverso |
| 1001 |
1 |
aaa |
| 1001 |
2 |
|
Tabella 3 (unione semplice con Paziente e Giorno dello studio come colonne corrispondenti e utilizzo delle colonne non corrispondenti incluse in entrambe le tabelle)
| Paziente |
Giornata di studio |
Saggio 1 |
Saggio 2 |
Saggio 3 |
Evento avverso |
| 1001 |
1 |
1 |
UN |
+ |
aaa |
| 1001 |
2 |
2 |
B |
+ |
|
Ciò impedisce assegnazioni accidentali ambigue che potrebbero essere effettuate e ne consente l'utilizzo in JMP per ulteriori analisi e grafici. Inoltre, la riga 2 nella tabella 2 non è realmente necessaria al momento dell'iscrizione perché si presuppone che non ci siano eventi nel giorno di studio 2.
CIAO @VBIR ,
COME @txnelson menzionato, per far sì che la tabella appaia esattamente come hai mostrato, dovresti eseguire alcuni script o più passaggi interattivi. Tuttavia, le tabelle JMP non sono progettate per visualizzare i dati in questo modo. Si tratta di tabelle di dati, non di fogli di calcolo, quindi il semplice join sarebbe simile a questo dal punto di vista della tabella di dati JMP

Questo perché le tabelle JMP vengono utilizzate per scopi analitici e grafici, mentre i fogli di calcolo servono per creare riepiloghi numerici più facili da leggere. Nel mondo delle sperimentazioni cliniche, i dati vengono generalmente archiviati nel modo mostrato nell'immagine, ma potrebbero essere visualizzati in modo più simile a quello mostrato.
Ciò porta alla domanda successiva: qual è il tuo obiettivo nel visualizzare i dati uniti nel modo che ci hai fornito? È a scopo di reporting o hai intenzione di eseguire ulteriori grafici o analisi con il risultato?
L'attività può essere eseguita aggiungendo una colonna contatore a entrambe le tabelle, contando ciascuno il numero di valori ripetuti del paziente presenti
Successivamente è possibile eseguire l'unione, abbinando paziente e contatore
Infine, l'attività viene completata riordinando i dati in base al valore di ordinamento del paziente e facendo una piccola pulizia

Ecco il JSL per ottenere i risultati, ma ogni attività all'interno del JSL può essere facilmente eseguita in modo interattivo
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} );