Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLIch habe zwei Tabellen, nennen wir sie dt1 und dt2
Jede Tabelle hat jeweils eine Spalte: Column1 in dt1 und Column2 in dt2.
Ich muss eine Tabelle aktualisieren oder eine neue erstellen, deren Inhalt von Spalte 1 durch manuelle Auswahl dem Inhalt von Spalte 2 zugeordnet ist. Da die Spaltenentitäten so unterschiedlich sind, kann eine Verknüpfungs- oder Aktualisierungsfunktion nicht verwendet werden.
Mein Ziel besteht darin, eine Benutzeroberfläche zu erstellen, die es dem Benutzer ermöglicht, zeilenweise Übereinstimmungen zwischen den Inhalten der beiden Spalten auszuwählen.

Automatisierung und SkriptingBetreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLWäre die Option „Mapping aus Tabelle anwenden“ in der Recode-Plattform für Ihre Situation nützlich? Falls ja, kann sie in ein Skript integriert werden.
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLHallo Jed_campbell,
Leider nein. Dies setzt voraus, dass eine Liste existiert, die eine Spalte einer anderen zuordnet. Ich versuche praktisch, eine solche Liste zu erstellen.
Nehmen wir für diese Frage an, dass ich nur zwei Tabellen, dt1 und dt2, habe, die jeweils nur eine Spalte (Spalte 1 bzw. Spalte 2) haben. Ich möchte einen Teil des Inhalts von Spalte 1 dem Inhalt von Spalte 2 zuordnen. (Ich verwende „einen Teil des Inhalts“, da die Anzahl der Zeilen in den beiden Spalten unterschiedlich ist.)
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLAh, so etwas sollte dann für Sie funktionieren, vorausgesetzt, ich verstehe es richtig. Sie würden die ersten beiden Tabellen durch Ihre eigenen ersetzen.

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]}
)
)
);
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLHallo Jed_Campbell, das sollte grundsätzlich funktionieren, aber ich erhalte die folgende Fehlermeldung, wenn ich versuche, diesen Code auf bereits geöffneten Tabellen dt1 mit Spalte „Auswahl1“ und dt2 mit Spalte „Auswahl2“ auszuführen. Ich verwende JMP17.
Der bereichsbezogene Datentabellenzugriff erfordert eine Datentabellenspalte oder -variable beim Zugriff oder der Auswertung von „dt1:Choice1“, dt1:Choice1/*###*/
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLIch habe das Problem behoben. Vielen Dank für Ihre Hilfe. Es funktioniert jetzt
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLHier ist eine sehr schnell zusammengewürfelte Benutzeroberfläche, die leicht an die Tabellenverknüpfungs-/Aktualisierungsplattformen von JMP angelehnt ist.
Mehr anzeigen...
/*""" 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();
Es gibt viele Verbesserungsmöglichkeiten, wie etwa bei der Spaltenauswahl, der Bereinigung der Benutzeroberfläche, der Fehlerbehandlung usw.
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLHallo Jarmo, vielen Dank. Das ist sehr hilfreich. In deinem Code vergleichst du die ersten Spalten jeder Tabelle. Können wir das so ändern, dass eine bestimmte Spalte einer Tabelle an beliebiger Stelle mit einer bestimmten Spalte (unabhängig von der Spaltennummer) in der zweiten Tabelle verglichen werden kann?
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLEs lässt sich leicht so ändern. Würde der Benutzer eine Spalte aus der ersten Tabelle auswählen und dann davon ausgehen, dass dieselbe Spalte in der zweiten Tabelle vorhanden ist? Oder sollte der Benutzer Spalten aus beiden Tabellen auswählen können?
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLDer Benutzer sollte vorzugsweise Spalten aus beiden Tabellen auswählen können.
Vielen Dank.
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLIch nehme an, es wäre nur eine einzelne Spalte aus beiden Tabellen? Ich sollte heute Zeit haben, dem Skript die erforderlichen Aktualisierungen hinzuzufügen.
Betreff: Zuordnen von Spalten in zwei verschiedenen Tabellen durch manuelle Auswahl mit JSLDas Erstellen wird länger dauern als erwartet, da der Benutzer auch die zweite Tabelle auswählen können muss. Das macht es sehr unübersichtlich, da sich alle „schönen“ Anzeigefelder beim Tabellenwechsel verhalten (siehe Filterspaltenauswahl und Spaltenlistenfeld …). Und ich habe abends weniger Zeit als erhofft.
Ich habe auch angefangen, kompliziertere Benutzeroberflächen zu erstellen, aber mir wurde klar, dass das eigentlich keinen Sinn ergibt, da die Recode-Plattform von JMP all dies übernehmen sollte. Ich schlage vor, Sie erstellen dazu einen Wunschlisteneintrag (ich kann auch einen erstellen, ich habe auch noch ein paar zusätzliche Vorschläge).