Mappatura delle colonne in due tabelle diverse tramite selezione manuale utilizzando JSLHo due tabelle, chiamiamole dt1 e dt2
Ogni tabella ha una colonna: Colonna1 in dt1 e colonna2 in dt2.
Devo aggiornare o creare una nuova tabella in cui il contenuto della Colonna 1 sia mappato al contenuto della Colonna 2 tramite selezione manuale. Poiché le entità della colonna sono così diverse, non è possibile utilizzare una funzione di join o aggiornamento.
Il mio obiettivo è creare un'interfaccia utente che consenta all'utente di selezionare la corrispondenza riga per riga del contenuto nelle due colonne.

Automazione e scriptingRe: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLL' opzione "Applica mapping da tabella" della piattaforma Recode potrebbe essere utile per la tua situazione? In tal caso, può essere integrata in uno script.
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLCiao Jed_campbell,
Purtroppo no. Questo presuppone che esista un elenco che mappa una colonna all'altra. Sto praticamente cercando di creare un elenco del genere.
Quindi, per lo scopo di questa domanda, supponiamo di avere solo due tabelle dt1 e dt2 e ciascuna di esse ha una sola colonna, rispettivamente column1 e column2, e di voler mappare parte del contenuto della colonna 1 al contenuto della colonna 2. (Uso "parte del contenuto" perché il numero di righe nelle due colonne è diverso)
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLAh, qualcosa del genere dovrebbe funzionare per te, se ho capito bene. Dovresti sostituire le prime due tabelle con le tue.

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: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLCiao Jed_Campbell, in linea di principio dovrebbe funzionare, ma ricevo il seguente errore quando provo a eseguire questo codice su tabelle già aperte dt1 con la colonna Scelta1 e dt2 con la colonna Scelta2. Sto usando JMP17.
L'accesso alla tabella dati con ambito richiede una colonna o una variabile della tabella dati nell'accesso o nella valutazione di 'dt1:Choice1', dt1:Choice1/*###*/
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLHo risolto il problema. Grazie mille per l'aiuto. Ora funziona.
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLEcco un'interfaccia utente molto rapida che segue leggermente le piattaforme di join/aggiornamento delle tabelle di JMP
Scopri di più...
/*""" 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();
Ci sono molti miglioramenti che potrebbero essere apportati, come la selezione delle colonne, la pulizia dell'interfaccia utente, la gestione degli errori, ...
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLCiao Jarmo, grazie mille. È molto utile. Nel tuo codice confronti le prime colonne di ogni tabella. Possiamo modificarlo in modo che una colonna specifica di una tabella in una posizione casuale possa essere confrontata con una colonna specifica (indipendentemente dal numero di colonna) nella seconda tabella?
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLPuò essere facilmente modificato in questo modo. L'utente dovrebbe selezionare una colonna dalla prima tabella e poi dare per scontato che la stessa colonna esista anche nella seconda? Oppure l'utente dovrebbe poter selezionare colonne da entrambe le tabelle?
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLPreferibilmente, l'utente dovrebbe poter selezionare le colonne da entrambe le tabelle.
Molte grazie.
Re: Mappatura delle colonne in due tabelle diverse tramite selezione manuale utilizzando JSLImmagino che si tratti di una sola colonna per entrambe le tabelle. Dovrei avere tempo oggi per aggiungere gli aggiornamenti necessari allo script.
Re: Mappatura di colonne in due tabelle diverse tramite selezione manuale utilizzando JSLCrearlo richiederà più tempo del previsto, perché l'utente deve poter scegliere anche la seconda tabella, il che rende il tutto molto caotico, visto il comportamento di tutte le caselle di visualizzazione "belle" quando cambiano le tabelle (ad esempio, il selettore di filtro e la casella di riepilogo delle colonne...). E la sera avrò meno tempo di quanto sperassi.
Ho anche iniziato a creare interfacce utente più complesse, ma mi sono reso conto che non ha senso, dato che la piattaforma Recode di JMP dovrebbe fare tutto questo. Ti consiglio di creare una voce nella lista dei desideri a riguardo (posso crearne una anch'io, ho anche qualche altro suggerimento).