조인 질문: 타임스탬프 범위, 일종의?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />그래서 비슷한 타임스탬프와 일치하는 행을 얻기 위해 조인을 수행하는 방법에 대한 질문이 있습니다.
두 개의 테이블이 있습니다. 하나는 결함 데이터용이고 다른 하나는 도구를 통한 웨이퍼 수입니다.타임스탬프가 일치하지 않으며 한 테이블에서 측정된 모든 웨이퍼가 다른 테이블에 기록되지 않습니다.
결함 수 대 웨이퍼 수를 플로팅하는 궁극적인 목표를 위해 이 테이블을 결합하는 방법에 대한 팁이 있습니까?
========
160만 행, ~6개월 데이터
표 1 - 결함 데이터
소량의 웨이퍼 샘플에서만 측정된 결함 데이터입니다.
인/아웃에 대한 타임스탬프이므로 전체 로트에 대한 단일 타임스탬프

표 2 - 웨이퍼 수
더 많은 웨이퍼 샘플링을 위한 개별 웨이퍼 타임스탬프.
각 웨이퍼에 대한 고유한 타임 스탬프

Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?감사해요!
Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?코드를 공유해 주셔서 감사합니다. 매우 도움이 됩니다!
가장 가까운 날짜/시간으로 두 테이블을 조인하고 다른 항목(예: 이 경우 Tool_ch)으로 그룹화하는 방법이 있는지 궁금합니다. 나는 두 테이블에서 동일한 요소를 하위 집합으로 만든 다음 가장 가까운 날짜로 조인하고 모든 것을 함께 병합하여 이 작업을 수행했습니다. 나는 이것이 이것을하는 효율적인 방법이라고 생각하지 않습니다. 
감사합니다~
펭
Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?따라서 두 테이블에서 원하는 대로라는 열을 만듭니다.
하나의 테이블 dt1에서 행 번호만 있는 행 열을 만듭니다.그런 다음 조인하려는 열에 대한 행렬로 값을 얻습니다.
mat = Column(dt1, "Column with the information you want to join") << Get Values;
그런 다음 수식을 사용하여 다른 테이블(dt2)에 열을 만듭니다.
Loc Min( Abs( Column( dt2, "Other Join Column" )[Row()] - mat ) );
이렇게 하면 dt2의 현재 행과 dt1의 전체 값 집합 간의 최소 차이가 있는 위치(행)를 제공합니다.
그런 다음 두 열을 함께 결합하면 됩니다.
Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?엄청난!나는 이것을 찔러야 할 것입니다 ... 나는 아직 이것에 익숙하지 않고 절뚝 거리려고합니다.
이것이 내가 설정할 수 있는 샘플 데이터 테이블이 있습니까?
따라서 DT1과 DT2 모두에 "Loc Min"이라는 새 열을 생성합니다.
그런 다음 새 테이블의 두 열을 일치시켜 조인합니다.
Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?Graham Blatz는 실제로 올해 JMP 컨퍼런스의 Advanced Scripting Session에서 바로 이 문제에 대해 이야기했습니다.나는 얼마 전에 그의 코드를 가지고 있지만 그는 실제로 그것을 미친 듯이 빠르게 만드는 KDTable()을 사용하여 그것을 개선했습니다.
다음은 가장 중요한 비트를 수행하는 함수의 스니펫입니다.
dt2 << New Column( "Loc Min", numeric, continuous, formula( Row() ) ); //indexing, basically, to match/update upon
list_big = Column( dt2, rt2 ) << get values; //creates a vector of values for the following
dt1 << New Column( "Loc Min",
numeric,
continuous,
formula(
Loc Min( Abs( Column( rt1 )[Row()] - list_big ) )
)
); //simple, but fast. Very fast.
dt_join = dt1 << Join(
With( dt2 ),
By Matching Columns( :Loc Min = :Loc Min ),
Drop multiples( 0, 1 ),
Name( "Include non-matches" )(0, 0),
Preserve main table order( 1 )
); // I opted for a join rather than an update, for now. may change in the future.
Here's the actual function as well that you can call and has a UI with it.
nearest_neighbor = Function(
//by Graham Blatz
//2/20/15
//Matches Nearest Neighbor of ostensibly dates, but whatever, man
{dt1 = Current Data Table(),
dt2 = Current Data Table(), rt1 = "ReadTime", rt2 = "ReadTime"
},
{DEFAULT LOCAL},
If( dt1 == dt2, //default execution of a prompt, dunno a clean way around this without making some user camp inconvenienced.
list_tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( list_tables, Data Table( i ) << get name );
); //sets up names of data tables to pick from
dt1 = Data Table( list_tables[1] );
dt2 = Data Table( list_tables[2] ); //Reasonable Starting point
win_tableselect = New Window( "Select Tables",
<<MODAL></MODAL>
Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?네 죄송합니다.WID를 사용했어야 합니다.물리적 슬롯 값이 그대로 유지된다고 가정할 수 있습니다.표 1의 L11 슬롯4는 표 2의 L11 슬롯4와 동일합니다.
operation#, process recipe, product type 등과 같이 조인 정확도를 높이는 데 사용할 수 있는 몇 가지 다른 일치하는 열이 있습니다.
Re: 조인 질문: 타임스탬프 범위, 좀 그런가요?나는 로트 무결성이 항상 유지된다고 가정하지만 웨이퍼가 슬롯 사이에서 섞인 적이 있습니까? 다르게 말하면 테이블 1의 행 4(L22, W10)와 테이블 2의 행 18(L22, W10)이 동일한 물리적 웨이퍼에 해당합니까?