데이터 테이블안녕,
JMP에서 두 개 이상의 테이블을 비교하여 모든 테이블에 공통된 열이 있는지 확인하고 싶습니다. 이제 해당 열의 값이 각 테이블에 있으면 1을 반환하고, 없으면 0을 반환하도록 하고 싶습니다. 미리 정의된 일부 테이블에 대해 각 테이블에 열을 추가하고 0 또는 1을 반환하는 JSL 스크립트를 사용하면 이 작업을 수행할 수 있습니다.
하지만 이 스크립트를 일반화해서 테이블 이름을 미리 정의할 필요가 없도록 하고 싶습니다. 이 스크립트를 실행할 때마다 어떤 테이블을 비교할지 묻도록 해야 합니다.
그 후에, 나는 또한 이 스크립트가 내가 비교하고 싶은 열을 선택할 수 있는 옵션을 제공하는 방식으로 작동하기를 원합니다.
현재 이 스크립트를 사용하고 있습니다
// 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);
편집(jthi): jsl 포맷 추가
제목 없음 9, 제목 없음 10, 제목 없음 11이라는 세 개의 테이블을 선택하고 비교하는 열은 "ID"입니다.
이것에 대해 도와주세요.
감사해요

자동화 및 스크립팅데이터 액세스Re: 데이터 테이블테이블에 몇 개의 행이 있고, 몇 개의 고유 값이 있나요? 이는 성능 문제를 방지하기 위한 방법에 영향을 줄 수 있습니다.
Re: 데이터 테이블어쨌든, 데이터 테이블 목록 + 목록 상자 가져오기를 사용하여 UI를 만들 수 있습니다. 아래는 시작하는 데 도움이 될 수 있는 간단한 버전입니다.
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: 데이터 테이블다음은 Jarmo의 JSL을 가져와 확장하여 초기 논의에서 보여준 결과를 보여주는 JSL의 세부 내용입니다.
이 함수는 연관 배열을 사용하여 3개 테이블에 모두 나타나는 열 이름의 교집합과 선택한 열에 나타나는 값의 교집합을 찾습니다.
또한 업데이트 플랫폼을 사용하여 결과를 원래 3개 테이블로 다시 이동합니다. 이 방법은 매우 큰 데이터 테이블에서도 매우 효율적일 것입니다.

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 />