Tablas de datosHola,
Quiero comparar más de dos tablas en JMP para una columna común presente en todas ellas. Ahora quiero devolver un 1 si los valores de esa columna específica existen en cada tabla; de lo contrario, un 0. Puedo hacerlo para algunas tablas predefinidas mediante un script JSL que agrega una columna adicional en cada tabla y devuelve 0 o 1.
Pero quiero que este script sea genérico para no tener que predefinir el nombre de las tablas. Debería ser así: al ejecutarlo, me preguntará qué tablas quiero comparar.
Después de eso, también quiero que este script funcione de tal manera que también pueda darme la opción de seleccionar qué columna quiero comparar.
Actualmente estoy usando este script.
// Get references to the three tables
dt1 = Data Table("Untitled 9");
dt2 = Data Table("Untitled 10");
dt3 = Data Table("Untitled 11");
// Extract ID values from each table
ids1 = dt1:ID << Get Values;
ids2 = dt2:ID << Get Values;
ids3 = dt3:ID << Get Values;
// Find common IDs manually
commonIDs = {};
For(i = 1, i <= N Items(ids1), i++,
If(Contains(ids2, ids1[i]) & Contains(ids3, ids1[i]),
Insert Into(commonIDs, ids1[i])
)
);
// Function to add indicator column
AddIndicatorColumn = Function({dt},
dt << New Column("PresentInAll",
Numeric,
Formula(If(Contains(commonIDs, :ID), 1, 0))
)
);
// Apply to all tables
AddIndicatorColumn(dt1);
AddIndicatorColumn(dt2);
AddIndicatorColumn(dt3);
Editar (jthi): se agregó formato jsl
Seleccionando tres tablas Sin título 9, Sin título 10 y Sin título 11 y la columna que estoy comparando es "ID"
Por favor ayuda con esto,
Gracias

Automatización y scriptingAcceso a datosRe: Tablas de datos¿Cuántas filas tienen sus tablas y cuántos valores únicos? Esto puede afectar la forma en que se debe realizar para evitar problemas de rendimiento.
Re: Tablas de datosDe todas formas, puedes crear la interfaz de usuario usando Obtener lista de tabla de datos + Cuadros de lista. A continuación, se muestra una versión rápida que puede ayudarte a empezar.
Names Default To Here(1);
dts = Get Data Table List();
If(N Items(dts) < 2,
Throw("Not enough tables open");
);
run_expr = Expr(
Show(lb_tables << get selected, lb_columns << get selected);
);
tables = dts << get name;
nw = New Window("",
H List Box(
Panel Box("Select tables",
lb_tables = List Box(tables,
<< Set Function(Function({this},
sel = this << get selected;
If(N Items(sel) < 1,
return(0);
);
cols = Datatable(sel[1]) << Get Column Names("String");
lb_columns << Set Items(cols);
))
),
),
Panel Box("Pick Column",
lb_columns = List Box({}, << Set Max Selected(1))
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
run_expr
),
Button Box("Cancel",
nw << close window;
)
)
)
)
);
Write();
Re: Tablas de datosAquí hay un fragmento detallado de JSL que toma el JSL de Jarmo y lo amplía para brindarle los resultados que muestra en su discusión inicial.
Utiliza matrices asociativas para encontrar la intersección de los nombres de columnas que aparecen en las tres tablas y también en los valores que aparecen en la columna seleccionada.
También utiliza la Plataforma de Actualización para devolver los resultados a las tres tablas originales. La metodología debería ser bastante eficiente incluso con tablas de datos muy grandes.

Names Default To Here( 1 );
dts = Get Data Table List();
If( N Items( dts ) < 2,
Throw( "Not enough tables open" )
);
tables = dts << get name;
// Create the table and column selection window
nw = New Window( "",
H List Box(
// Define the Table selection box
Panel Box( "Select tables",
lb_tables = List Box(
tables,
maxselected( 3 ),
<
<SET function="">
0, lb_columns << Set Items( cols ); pickPBox << visibility( "Visible" ); ); ); ) ) ), ), // Define the column selection box pickPBox = Panel Box( "Pick Column", lb_columns = List Box( {}, Max Selected( 1 ), <
<SET function=""></SET>
</SET>
<BR />