Le tableau 1 ressemble à
| patient | résultat du test 1 | résultat du test 2 | résultat du test 3 |
| 1001 | 1 | un | + |
| 1001 | 2 | b | + |
| 1002 | 1 | c | - |
| 1003 | 2 | d | - |
Le tableau 2 ressemble à
| patient | événement indésirable |
| 1001 | aaa |
| 1002 | aab |
| 1002 | aaa |
| 1002 | aad |
| 1003 | bbb |
| 1003 | bbc |
Le résultat que je veux obtenir ressemble à
patient la colonne est une « colonne partagée » pour ces deux tables)
| patient | résultat du test 1 | résultat du test 2 | résultat du test 3 | événement indésirable |
| 1001 | 1 | un | + | aaa |
| 1001 | 2 | b | + | |
| 1002 | 1 | c | - | aab |
| | | | | aaa |
| | | | | aad |
| 1003 | 2 | d | - | bbb |
| | | | | bbc |
Quelqu'un pourrait-il me proposer une solution (la plus simple possible) ?
Merci
@Chris_Kirchberg merci pour votre patience et vos réponses très détaillées!
J'aurais dû noter qu'il s'agit d'un exemple que j'ai créé à partir de rien.
Je veux juste créer un tableau qui ressemble à cet exemple pour d'autres coéquipiers programmeurs afin qu'ils puissent comparer LB et AE en faisant facilement défiler l'écran.
Oh, j'ai oublié de mentionner que lors de la mesure d'un test plusieurs fois pour un patient, chaque mesure devrait vraiment avoir son propre identifiant pour garantir un alignement correct des événements indésirables (qui auraient un identifiant correspondant) à chaque mesure sans confusion possible ( comme dans mon exemple, l'événement indésirable aaa s'est répété pour le patient 1001, mais n'aurait pas dû l'être, je suppose.
Généralement, un horodatage (ou jour d'étude) pour l'événement indésirable et un horodatage (ou jour d'étude) pour chaque mesure pour chaque test. De cette façon, si les événements indésirables sont censés concerner une seule des mesures rapportées pour chaque test, ils seront correctement affichés. Idem pour plusieurs événements indésirables survenus le jour même où le résultat du test a été enregistré. Par exemple:
Tableau 1
| Patient |
Journée d'étude |
Essai 1 |
Essai 2 |
Essai 3 |
| 1001 |
1 |
1 |
un |
+ |
| 1001 |
2 |
2 |
b |
+ |
Tableau 2
| Patient |
Journée d'étude |
Événement indésirable |
| 1001 |
1 |
aaa |
| 1001 |
2 |
|
Tableau 3 (simple jointure avec le patient et le jour de l'étude en tant que colonnes correspondantes et en utilisant la non-correspondance incluse dans les deux tableaux)
| Patient |
Journée d'étude |
Essai 1 |
Essai 2 |
Essai 3 |
Événement indésirable |
| 1001 |
1 |
1 |
un |
+ |
aaa |
| 1001 |
2 |
2 |
b |
+ |
|
Cela évite les affectations accidentelles ambiguës qui pourraient être effectuées et permet une utilisation dans JMP pour une analyse et des graphiques plus approfondis. De plus, la ligne 2 du tableau 2 n'est pas vraiment nécessaire lors de l'adhésion car on supposerait qu'il n'y a aucun événement le jour d'étude 2.
Salut @VBIR ,
Comme @txnelson mentionné, pour que le tableau ressemble exactement à ce que vous avez montré, vous devrez effectuer des scripts ou plusieurs étapes interactives. Cependant, les tableaux JMP ne sont pas vraiment conçus pour afficher les données de cette manière. Ce sont des tables de données, pas des feuilles de calcul, donc la simple jointure ressemblerait à ceci du point de vue d'une table de données JMP

En effet, les tableaux JMP sont utilisés à des fins analytiques et graphiques, tandis que les feuilles de calcul servent à créer des résumés numériques plus faciles à lire. Dans le monde des essais cliniques, les données sont généralement stockées de la manière indiquée dans l'image, mais peuvent être affichées davantage comme ce que vous avez montré.
Cela nous amène donc à la question suivante : quel est votre objectif en affichant les données jointes de la manière que vous nous avez indiquée ? Est-ce à des fins de reporting ou envisagez-vous de faire des graphiques ou des analyses supplémentaires avec le résultat ?
La tâche peut être accomplie en ajoutant une colonne de compteur aux deux tableaux, en comptant chacune du nombre de valeurs répétées du patient.
Ensuite, la jointure peut être effectuée, en faisant correspondre le patient et le comptoir.
Enfin, en triant les données selon la valeur de tri du patient et en effectuant un petit nettoyage, la tâche est réalisée.

Voici le JSL pour obtenir les résultats, mais chaque tâche du JSL peut facilement être effectuée de manière interactive
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} );