La tabla 1 parece
| paciente | resultado del ensayo 1 | resultado del ensayo 2 | resultado del ensayo 3 |
| 1001 | 1 | a | + |
| 1001 | 2 | b | + |
| 1002 | 1 | C | - |
| 1003 | 2 | d | - |
La tabla 2 parece
| paciente | acontecimiento adverso |
| 1001 | aaa |
| 1002 | ab |
| 1002 | acac |
| 1002 | anuncio |
| 1003 | bbb |
| 1003 | bbc |
El resultado que quiero obtener es el siguiente:( paciente la columna es una 'columna compartida' para estas dos tablas)
| paciente | resultado del ensayo 1 | resultado del ensayo 2 | resultado del ensayo 3 | acontecimiento adverso |
| 1001 | 1 | a | + | aaa |
| 1001 | 2 | b | + | |
| 1002 | 1 | C | - | ab |
| | | | | acac |
| | | | | anuncio |
| 1003 | 2 | d | - | bbb |
| | | | | bbc |
¿Alguien podría darme una solución (lo más simple posible)?
Gracias
@Chris_Kirchberg ¡Gracias por tu paciencia y respuestas tan detalladas!
Debería haber notado que este es un ejemplo que hice de la nada.
Solo quiero crear una tabla similar a este ejemplo para que otros compañeros de equipo de programación puedan comparar LB y AE desplazándose fácilmente por la pantalla.
Oh, olvidé mencionar que cuando se mide un ensayo varias veces para un paciente, cada medición realmente debe tener su propia identificación para garantizar que haya una alineación adecuada de los eventos adversos (que tendrían una identificación coincidente) con cada medición sin posible confusión ( como en mi ejemplo, el evento adverso aaa se repitió para el paciente 1001, pero supongo que no debería haber sido así.
Normalmente, un sello de fecha y hora (o día de estudio) para el evento adverso y un sello de fecha y hora (o día de estudio) para cada medición de cada ensayo. De esa manera, si se supone que los eventos adversos corresponden solo a una de las mediciones informadas para cada ensayo, se mostrará correctamente. Lo mismo ocurre con múltiples eventos adversos para el mismo día en que se registró el resultado del ensayo. Por ejemplo:
tabla 1
| Paciente |
Día de estudio |
Ensayo 1 |
Ensayo 2 |
Ensayo 3 |
| 1001 |
1 |
1 |
a |
+ |
| 1001 |
2 |
2 |
b |
+ |
Tabla 2
| Paciente |
Día de estudio |
Acontecimiento adverso |
| 1001 |
1 |
aaa |
| 1001 |
2 |
|
Tabla 3 (unión simple con Paciente y Día de estudio como columnas coincidentes y uso de no coincidencias incluidas de ambas tablas)
| Paciente |
Día de estudio |
Ensayo 1 |
Ensayo 2 |
Ensayo 3 |
Acontecimiento adverso |
| 1001 |
1 |
1 |
a |
+ |
aaa |
| 1001 |
2 |
2 |
b |
+ |
|
Esto evita asignaciones accidentales ambiguas que podrían realizarse y permite su uso en JMP para análisis y gráficos adicionales. Además, la fila 2 en la tabla 2 no es realmente necesaria al unirse porque se asumiría que no hay eventos en el Día de Estudio 2.
Hola @VBIR ,
Como @txnelson Como se mencionó, para que la tabla se vea exactamente como se muestra, tendría que realizar algunas secuencias de comandos o varios pasos interactivos. Sin embargo, las tablas JMP realmente no están diseñadas para mostrar datos de esa manera. Son tablas de datos, no hojas de cálculo, por lo que la combinación simple se vería así desde el punto de vista de una tabla de datos JMP.

Esto se debe a que las tablas JMP se utilizan con fines analíticos y gráficos, mientras que las hojas de cálculo sirven para hacer resúmenes numéricos que sean más fáciles de leer. En el mundo de los ensayos clínicos, los datos normalmente se almacenan de la forma que se muestra en la imagen, pero es posible que se muestren más como lo que usted ha mostrado.
Eso nos lleva a la siguiente pregunta: ¿cuál es su objetivo al mostrar los datos unidos en la forma que nos ha proporcionado? ¿Es para fines de generación de informes o planea realizar algún gráfico o análisis adicional con el resultado?
La tarea se puede realizar agregando una columna de contador a ambas tablas, contando cada uno de los valores repetidos de paciente que hay.
Luego se puede realizar la unión, haciendo coincidir el paciente y el mostrador.
Finalmente, se realiza la tarea de ordenar los datos según el valor de clasificación del paciente y realizar una pequeña limpieza.

Aquí está el JSL para obtener los resultados, pero cada tarea dentro del JSL se puede realizar fácilmente de forma interactiva.
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} );