質問に参加: タイムスタンプの範囲、ちょっと?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />したがって、結合を行って行を似たようなタイムスタンプに一致させる方法について質問があります。
2 つのテーブルがあります。1 つは欠陥データ用、もう 1 つはツールによるウェーハ カウント用です。タイムスタンプは一致せず、一方のテーブルで測定されたすべてのウェーハが他方のテーブルに記録されるわけではありません。
欠陥数とウェーハ数をプロットするという最終的な目標のために、この表に参加する方法に関するヒントはありますか?
========
160 万行、約 6 か月分のデータ
表 1 - 欠陥データ
ウェーハの小さなサンプルでのみ測定された欠陥データ。
入出庫のみのタイムスタンプなのでロット全体で1つのタイムスタンプ

表 2 - ウェーハ数
ウェーハのより大きなサンプリングのための個々のウェーハタイムスタンプ。
各ウェーハの固有のタイムスタンプ

Re: 質問に参加: タイムスタンプの範囲、ちょっと?ありがとう!
Re: 質問に参加: タイムスタンプの範囲、ちょっと?コードを共有してくれた Vince に感謝します。 とても助かります!
最も近い日付/時刻で 2 つのテーブルを結合し、この場合は Tool_ch などの別のものでグループ化する方法があるのではないかと考えています。 両方のテーブルで同じ要素をサブセット化し、最も近い日付で結合して、すべてをマージすることでこれを行ってきました。 これはこれを行うための効率的な方法ではないと思います。 
ありがとう〜
鵬
Re: 質問に参加: タイムスタンプの範囲、ちょっと?したがって、両方のテーブルで必要な名前の列を作成します。
1 つのテーブル 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 の値のセット全体との差が最小になる位置 (行) が得られます。
次に、2 つの列を結合します。
Re: 質問に参加: タイムスタンプの範囲、ちょっと?素晴らしい!私はこれを突く必要があります...私はまだこれに慣れておらず、足を引きずろうとしています。
これが適用され、セットアップできるサンプル データ テーブルはありますか?
したがって、DT1 と DT2 の両方に新しい列「Loc Min」を作成します。
次に、新しいテーブルの 2 つの列を一致させて結合します
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 Slot4 は、表 2 の L11 Slot4 と同じです。
操作番号、プロセスレシピ、製品タイプなど、結合の精度を上げるために使用できる他のいくつかの一致する列があります。
Re: 質問に参加: タイムスタンプの範囲、ちょっと?ロットの整合性は常に保たれていると思いますが、ウェーハがスロット間でシャッフルされることはありますか? 別の言い方をすれば、表 1 の 4 行目 (L22、W10) と表 2 の 18 行目 (L22、W10) は、同じ物理ウェーハに対応していますか?