Mapeo de columnas en dos tablas diferentes mediante selección manual usando JSLTengo dos tablas, llamémoslas dt1 y dt2
Cada tabla tiene una columna cada una, Columna1 en dt1 y Columna2 en dt2.
Necesito actualizar o crear una tabla nueva que tenga el contenido de la Columna 1 asignado al de la Columna 2 mediante selección manual. Dado que las entidades de columna son tan diferentes, no se puede usar la función de unión ni actualización.
Mi objetivo es crear una interfaz de usuario que permita al usuario seleccionar fila por fila la coincidencia del contenido en las dos columnas.

Automatización y scriptingRe: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSL¿Te resultaría útil la opción "Aplicar mapeo desde la tabla" de la plataforma Recode ? De ser así, puedes incorporarla a un script.
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLHola Jed_campbell,
Lamentablemente no. Esto supone que existe una lista que asigna una columna a otra. En la práctica, estoy intentando crear dicha lista.
Para esta pregunta, supongamos que tengo solo dos tablas, dt1 y dt2, y cada una tiene una sola columna (columna 1 y columna 2, respectivamente), y quiero asignar parte del contenido de la columna 1 al contenido de la columna 2. (Uso "parte del contenido" porque el número de filas en ambas columnas es diferente).
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLAh, algo así debería funcionarte, si es que lo entiendo bien. Reemplazarías las dos primeras tablas con las tuyas.

Names Default To Here( 1 );
dt1 = New Table( "Table 1",
Add Rows( 4 ),
New Column( "Choice1", Character, "Nominal", Set Values( {"A", "B", "C", "D"} ) )
);
dt2 = New Table( "Table 2",
Add Rows( 5 ),
New Column( "Choice2", Character, "Nominal", Set Values( {"L", "M", "N", "O", "P"} ) )
);
dtlookup = New Table( "lookuptable",
Add Rows( 0 ),
New Column( "dt1choice", Character, "Nominal" ),
New Column( "dt2choice", Character, "Nominal" )
);
lst1 = Associative Array( dt1:Choice1 ) << get keys;
lst2 = Associative Array( dt2:Choice2 ) << get keys;
nw = New Window( "Chooser",
H List Box(
lb1 = List Box( lst1, max selected( 1 ) ),
lb2 = List Box( lst2, max selected( 1 ) ),
),
Button Box( "Make Match",
dtlookup << add rows(
{dt1choice = (lb1 << get selected)[1], dt2choice = (lb2 << get selected)[1]}
)
)
);
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLHola Jed_Campbell, en principio esto debería funcionar, pero obtengo el siguiente error al intentar ejecutar este código en las tablas dt1 con la columna Choice1 y dt2 con la columna Choice2 ya abiertas. Estoy usando JMP17.
El acceso a la tabla de datos con ámbito requiere una columna o variable de la tabla de datos en el acceso o la evaluación de 'dt1:Choice1', dt1:Choice1/*###*/
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLYa solucioné el problema. Muchas gracias por tu ayuda. Ya funciona.
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLAquí se presenta una interfaz de usuario rápidamente ensamblada que sigue ligeramente las plataformas de unión/actualización de tablas de JMP.
Ver más...
/*""" Map two columns together
Author: jthi
Creation Date: 2025-06-05
Creation JMP Version: JMP Pro 18.2.0
"""*/
Names Default To Here(1);
dt1 = New Table("Untitled", New Column("Column 1", Character, "Nominal", Set Values({"A", "B", "C"})));
dt2 = New Table("Untitled", New Column("Column 2", Character, "Nominal", Set Values({"E", "F", "G", "H"})));
nw = New Window("Matcher",
Lineup Box(N Col(3),
V List Box(
Panel Box("From - Table: " || (dt1 << get name || ", Column: " || (Column(dt1, 1) << get name)),
window:lb_from = List Box(Column(dt1, 1) << get values)
),
Panel Box("To - Table: " || (dt2 << get name || ", Column: " || (Column(dt2, 1) << get name)),
window:lb_to = List Box(Column(dt2, 1) << get values)
)
),
Panel Box("Match",
H List Box(align("top"),
Button Box("Match",
<< Set Function(function({this},
from_selections = window:lb_from << get selected;
to_selections = window:lb_to << get selected;
pairs = {};
For Each({{from, to}}, Across(from_selections, to_selections, Count("Shortest")),
Insert Into(pairs, Eval Insert("^from^=^to^"));
);
window:lb_match << Append(pairs);
))),
window:lb_match = List Box({}, << Set N Lines(20))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK", << Set Function(function({this},
selections = window:lb_match << get items;
from_values = {};
to_values = {};
For Each({selection}, selections,
{from, to} = Words(selection, "=");
Insert Into(from_values, from);
Insert Into(to_values, to);
);
dt_result = New Table(Eval Insert("^(dt1 << get name)^ mapped to ^(dt2 << get name)^"),
New Column(Column(dt1, 1) << get name, Character, Nominal, Values(from_values)),
New Column(Column(dt2, 1) << get name, Character, Nominal, Values(to_values))
);
If(!(window:cb_keepdialog << get),
this << close window;
);
))),
Button Box("Cancel", << Set Function(function({this}, this << close window))),
Spacer Box(Size(0, 10)),
Button Box("Remove",
window:lb_match << Remove Selected();
),
window:cb_keepdialog = Check Box({"Keep Dialog Open"}, << Set All(1))
)
)
)
);
Write();
Hay muchas mejoras que se podrían realizar, como la selección de columnas, la limpieza de la interfaz de usuario, el manejo de errores, etc.
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLHola Jarmo, muchas gracias. Es muy útil. En tu código, comparas las primeras columnas de cada tabla. ¿Podríamos modificarlo para que una columna específica de una tabla, en una ubicación aleatoria, se compare con una columna específica (independientemente del número) de la segunda tabla?
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLSe puede modificar fácilmente de esta manera. ¿El usuario seleccionaría una columna de la primera tabla y luego se asumiría que la misma columna existe en la segunda? ¿O debería poder seleccionar columnas de ambas tablas?
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLPreferiblemente, el usuario debería poder seleccionar columnas de ambas tablas.
Muchas gracias.
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLSupongo que solo será una columna de ambas tablas. Hoy tendré tiempo para añadir las actualizaciones necesarias al script.
Re: Asignación de columnas en dos tablas diferentes mediante selección manual usando JSLCrear esto llevará más tiempo del esperado, ya que el usuario también debe poder seleccionar la segunda tabla, lo que lo hace muy confuso debido al comportamiento de todos los cuadros de visualización "agradables" al cambiar de tabla (mirando el selector de columnas de filtro y el cuadro de lista de columnas...). Además, tengo menos tiempo por la noche del que esperaba.
También comencé a crear una interfaz de usuario más compleja, pero me di cuenta de que no tenía sentido, ya que la plataforma Recode de JMP debería encargarse de todo esto. Te sugiero que crees una lista de deseos sobre esto (yo también puedo crearla, tengo algunas sugerencias adicionales).