如何匹配兩列的值,即使順序可能不同假設我對晶圓的缺陷進行了兩次測量,並獲得了每個缺陷的 X、Y 軸數據。
有些缺陷是重複缺陷,它們的軸數據非常相似(雖然不完全相同),所以我給它們貼上「重複」標籤;而有些缺陷沒有匹配項,所以我給它們貼上「新」標籤。
如何編寫一個公式來自動完成此操作? (例如:使用公式自動建立「基於之後結果的判斷」欄位)
(請注意,對於相同缺陷,數值並不完全相同,只是非常接近。而且,相同缺陷在處理前後可能位於不同的行。)
| X之前 |
Y-之前 |
X-之後 |
Y-之後 |
法官根據之後的情況做出判斷 |
| -446659 |
888856 |
-446649 |
888852 |
重複 |
| -445908 |
630775 |
-445899 |
630772 |
重複 |
| -447462 |
301534 |
-446122 |
588199 |
新的 |
| -140914 |
508425 |
-447456 |
301532 |
重複 |
| |
|
-140907 |
508433 |
重複 |
進階統計建模消費者與市場研究資料融合與清理回复:如何在順序可能不同的情況下匹配兩列的值謝謝你的澄清。這個腳本的關鍵是對函數的理解
dt << 獲取行 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 個單位作為被認為是相同缺陷的距離,這只是我的猜測。鑑於我不知道缺陷測量工具的分辨率和您的步進器分辨率能力,我沒有真正的方法來設置該值。但是,您應該能夠估計工具的可變性並從中設置距離單位。
回复:如何在順序可能不同的情況下匹配兩列的值嗨 txnelson,
謝謝你的回复,我試過你的方法。 但是,有一個問題。
看來您只比較同一行的數據。
真實情況是:
對於之前,可能有 500 個缺陷,即 500 行。 之後,可能有 1000 行。
同樣的缺陷可能位於前列的第 50#行,而後列位於第 121 行,您不會知道。
因此,有必要將之後的所有 1000 行與之前的所有 500 行進行比較,以匹配每個重複缺陷。
匹配結果可能是:500個匹配到490個,10個匹配失敗,另外500個是新加法器
回复:如何在順序可能不同的情況下匹配兩列的值這是一種方法。我確定兩點之間的差異,然後將新建/重複邏輯應用於差異。我相信你的數據表中有一個錯誤,它出現在新的計算中
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"
);
);