JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑두 개의 테이블이 있는데, 각각 dt1과 dt2라고 부르겠습니다.
각 테이블에는 열이 하나씩 있습니다. 각 열은 dt1의 Column1이고 dt2의 Column2입니다.
열 1의 내용을 열 2의 내용에 매핑하는 테이블을 수동으로 선택해서 (업데이트하거나 새 테이블을 만들어야 합니다.) 열 엔터티가 너무 다르기 때문에 조인이나 업데이트 기능을 사용할 수 없습니다.
제 목표는 사용자가 두 열의 내용을 행별로 일치시켜 선택할 수 있는 사용자 인터페이스를 만드는 것입니다.

자동화 및 스크립팅Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑Recode 플랫폼의 "테이블에서 매핑 적용" 옵션 이 상황에 유용할까요? 그렇다면 스크립트에 통합할 수 있습니다.
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑안녕하세요 Jed_campbell,
안타깝게도 아닙니다. 이는 한 열을 다른 열에 매핑하는 목록이 존재한다고 가정합니다. 저는 사실상 그런 목록을 만들려고 합니다.
이 질문의 목적을 위해 dt1과 dt2라는 두 개의 테이블이 있고, 각 테이블에는 각각 column1과 column2라는 열이 하나씩만 있다고 가정해 보겠습니다. 그리고 column1의 일부 내용을 column2의 내용에 매핑하려고 합니다. (두 열의 행 수가 다르기 때문에 "일부 내용"이라고 표현했습니다.)
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑아, 제가 제대로 이해했다면 이런 식으로 하면 될 것 같네요. 처음 두 표를 본인이 직접 만든 표로 바꾸시면 됩니다.

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: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑안녕하세요, Jed_Campbell 님. 이 코드는 원칙적으로는 작동해야 하지만, 이미 열려 있는 dt1 테이블(선택 열 1 포함)과 dt2 테이블(선택 열 2 포함)에서 이 코드를 실행하려고 하면 다음 오류가 발생합니다. 저는 JMP17을 사용하고 있습니다.
범위가 지정된 데이터 테이블 액세스에는 'dt1:Choice1', dt1:Choice1/*###*/의 액세스 또는 평가에 데이터 테이블 열 또는 변수가 필요합니다.
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑문제를 해결했습니다. 도와주셔서 정말 감사합니다. 지금은 잘 작동하고 있습니다.
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑JMP의 테이블 조인/업데이트 플랫폼을 약간 따르는 매우 빠르게 구성된 UI입니다.
더 보기...
/*""" 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();
열 선택, UI 정리, 오류 처리 등 개선할 부분이 많이 있습니다.
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑안녕하세요, Jarmo님. 정말 감사합니다. 정말 도움이 많이 됩니다. 코드에서 각 테이블의 첫 번째 열을 비교하고 있는데, 한 테이블의 특정 열(열 번호와 관계없이)을 다른 테이블의 특정 열과 무작위로 비교할 수 있도록 코드를 수정할 수 있을까요?
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑이런 식으로 쉽게 수정할 수 있습니다. 사용자가 첫 번째 테이블에서 열을 선택하면 두 번째 테이블에도 같은 열이 있다고 가정해야 할까요? 아니면 두 테이블 모두에서 열을 선택할 수 있어야 할까요?
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑사용자는 두 테이블 모두에서 열을 선택할 수 있어야 합니다.
정말 감사합니다.
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑두 테이블에서 하나의 열만 가져오는 건가요? 오늘 스크립트에 필요한 업데이트를 추가할 시간이 있을 것 같습니다.
Re: JSL을 사용하여 수동 선택을 통해 두 개의 다른 테이블의 열 매핑이 작업을 하려면 예상보다 시간이 더 오래 걸릴 것 같습니다. 사용자가 두 번째 테이블도 선택할 수 있어야 하니까요. 테이블이 변경될 때 모든 "멋진" 표시 상자가 어떻게 동작하는지 보면 정말 복잡해집니다(필터 색상 선택기와 색상 목록 상자를 보면...). 게다가 저녁에는 예상보다 시간이 부족합니다.
더 복잡한 UI도 만들기 시작했는데, JMP의 Recode 플랫폼이 이 모든 기능을 담당해야 하니 굳이 그럴 필요가 없다는 걸 깨달았습니다. 이 부분에 대해 위시리스트 항목을 만들어 보시는 걸 추천합니다 (저도 만들 수 있지만, 몇 가지 추가 제안이 있습니다).