順序が異なる場合でも2つの列の値を一致させる方法たとえば、ウェーハの欠陥を 2 回測定し、欠陥ごとに X 軸、Y 軸のデータがあるとします。
いくつかの欠陥は繰り返し欠陥であり、軸データが非常に類似しています (まったく同じではありませんが) ので、それらには「繰り返し」タグを付けます。一方、いくつかの欠陥は一致しないので、それらには「新規」タグを付けます。
これを自動的に実行する数式をどのように記述すればよいですか? (例: 「後に基づいて判断する」列を自動的に作成する数式)
(同じ欠陥であっても、値はまったく同じではなく、非常に近い値になることに注意してください。また、同じ欠陥が前後で異なる行に表示される場合もあります)
| X-Before |
Y-前 |
X-アフター |
Y-アフター |
後に基づいて判断する |
| -446659 |
888856 |
-446649 |
888852 |
繰り返す |
| -445908 |
630775 |
-445899 |
630772 |
繰り返す |
| -447462 |
301534 |
-446122 |
588199 |
新しい |
| -140914 |
508425 |
-447456 |
301532 |
繰り返す |
| |
|
-140907 |
508433 |
繰り返す |
高度な統計モデリング消費者・市場調査データのブレンドとクリーンアップRe: 順序が異なる可能性があるときに 2 つの列の値を一致させる方法明確にしていただきありがとうございます。このスクリプトの鍵は、関数の理解です
dt << get 行 where()
次に、有効な Before X 値と Y 値を持つすべての行をループします。
Names Default To Here( 1 );
dt = Current Data Table();
xFudge = Abs( Min( Col Min( :"x-before"n ), Col Min( :"x-after"n ) ) );
yFudge = Abs( Min( Col Min( :"y-before"n ), Col Min( :"y-after"n ) ) );
dt << New Column( "Repeat_New", character, set each value( "New" ) );
For( i = 1, i <= N Rows( dt ), i++,
If( Is Missing( :"x-before"n[i] + :"y-before"n[i] ) == 0,
Try(
:Repeat_New[dt << get rows where(
Sqrt(
((xFudge + :"x-before"n[i]) - (xFudge + :"x-after"n)) ^ 2 + ((yFudge
+:"y-before"n[i]) - (yFudge + :"y-after"n)) ^ 2
) < 100 & Row() >= i
)] = "Repeat"
)
)
);
データ テーブルの行数を見積もると、スクリプトの処理にかなりの時間がかかることが予想されます。
同じ欠陥と見なされる距離として <= 100 単位を使用するのは、私の推測です。欠陥測定ツールの解像度とステッパーの解像度能力がわからないので、その値を設定する実際の方法はありません。ただし、ツールの変動性を推定し、その設定から距離単位を推定できるはずです。
Re: 順序が異なる可能性があるときに 2 つの列の値を一致させる方法こんにちは。
返信ありがとうございます、あなたの方法を試してみました。 ただし、問題があります。
同じ行のデータのみを比較しているようです。
実際の状況は次のとおりです。
以前は、500 の欠陥、つまり 500 行が存在する可能性がありました。 その後、1000行になる可能性があります。
同じ欠陥が前の列の 50 行目にあり、後の列の 121 行目にあるかもしれませんが、わかりません。
そのため、1000 行すべての after と 500 行すべての before を比較して、すべての繰り返し欠陥に一致させる必要があります。
一致結果は次のようになります: 500 のうち 490 が一致を見つけることができ、10 が欠落し、残りの 500 は新しい追加者です。
Re: 順序が異なる可能性があるときに 2 つの列の値を一致させる方法ここに 1 つのアプローチがあります。2 つのポイントの違いを判断し、その違いに New/Repeat ロジックを適用します。データ テーブルにエラーがあると思いますが、それが新しい計算に表示されます
Names Default To Here( 1 );
dt = Current Data Table();
xFudge = Abs( Min( Col Min( :"x-before"n ), Col Min( :"x-after"n ) ) );
yFudge = Abs( Min( Col Min( :"y-before"n ), Col Min( :"y-after"n ) ) );
//dt << New Column( "diff" );
dt << New Column( "Repeat_New", character );
For Each Row(
diff = Sqrt(
((xFudge + :"x-before"n) - (xFudge + :"x-after"n)) ^ 2 + ((yFudge + :"y-before"n) - (yFudge +
:"y-after"n)) ^ 2
);
If( diff < 100 | isMissing(diff)
,
:Repeat_New = "Repeat";
,
:Repeat_New = "New"
);
);