早安!! 幾週來我一直在用頭撞牆,試圖解決這個問題,但我已經沒有想法了。
我想將構建清單上的所有主要/替代品分組在一起,然後我可以將其與其他構建清單上的所有其他主要/替代品進行比較,並根據所使用的主要產品提出將替代品添加到其他零件編號的建議。
附件是一個範例文件。 為簡單起見,我使所有主要/備用組都以相同的數字(即 20 或 40)開頭,但最後的數字不同。 可以透過查看組裝和位置來形成零件編號的初始組,然後將組添加到其他組(如果它們有任何共同點)。 我試圖使用關聯數組,但我不確定這是否是正確的方法。
預先感謝大家提供的任何幫助!
謝謝大家的意見!我與一位同事分享了這個問題,他想出了另一種方法——更多的是暴力方法。
附件是執行我正在尋找的操作的腳本。基本上,我們將表本身連接起來以將零件編號分組,然後再次連接到 assembly_location 以獲取所有零件編號。
經過一些匯總和來回轉置後,結果是一個列表,其中所有備用/主要組都在單列中,並用分組值標記。
再次感謝!
布萊恩
@SirBWhite你提出了一個有趣的問題,我希望有一些優雅的方法來做到這一點。 吉姆的, @tx尼爾森的,建議讓我考慮了冒泡排序和相似類型分析。我希望有一些文字探勘解決方案和文字距離度量可以使這成為一項簡單的任務。
根據您與吉姆的討論,我將重新組織數據:
產生的表格(下面顯示的一部分)將大大減少可比較組件的選擇。

這是該表的圖形化圖片

附上執行此操作的腳本。我要做的如下:
- 在原始列中新增一個名為「類型代碼」的列,當類型 = PRM 時為 2,當類型 = ALT 時為 1。
- 然後拆分錶(暫時)並用零重新編碼缺失
- 我仍然會對表格進行排序,但這是不必要的。
該表的零件列現在是數字列,可用於聚類演算法和最近鄰演算法。
謝謝@tx尼爾森!我喜歡這種方法,但並非所有組件都可以使用相同的零件編號構建,很難查看數千個組件和零件。我可能過於簡化了我的範例,並在其之上添加了非常複雜的解釋。
我在我認為可行的方法上取得了一些進展。我能夠弄清楚如何為每個組裝位置及其附帶的零件編號動態建立關聯數組。這是腳本:
dt=Data Table( "Example" );
//Combine columns to get a single unique identifer for each row
dt << Combine Columns(
delimiter( "_" ),
Columns( :Assembly, :Location ),
Selected Columns are Indicator Columns( 0 ),
Column Name( "Assembly_Location" )
);
//Creates columns for each Assembly_Location - Grouping Like Part numbers together
dt1=dt << Split(
Split By( :Assembly_Location ),
Split( :Part Number ),
Remaining Columns( Drop All ),
Sort by Column Property, <BR /> Table Name ("Transposed Example")
);
//Get all column names as a list
allnames=dt1<<GET column="" names=""></GET>//Create an associative array for every column with the column name used as the array name
for (i = 1, i <= nitems(allnames), i++,
<BR />// If it's a string column then create the column name and an array name for use as a dynamic input
if (is string(allnames[i]),
col_name = "dt1:Name(\!"" || allnames[i]||"\!")" ;
array_name = "aa" || allnames[i];
// Build associative array string dynamically and then execute it.
str = evalinsert(
"\[^array_name^=Associative Array (^col_name^) ;]\");
eval(parse(str));
);
);
aaKBR175_001;<BR />aaKBR175_002;<BR />aaKBR175_003;
現在我想將每個數組與其他數組進行比較,看看是否有重疊。如果有的話,我想合併數組。 例如,請查看 KBR175-001 (20-0002、20-0003、20-0004、20-0005)、TRT330-003(20-0002、20-0003、20-0004)、NTE484-001(20-0002、20-0004)、NTE484-001(20-0002、20-0005 ) 、20-0007)、KNW995-002 (20-0002、20-0003、20-0004、20-0005)。 結果將是:(20-0002、20-0003、20-0004、20-0005、20-0007)。
我認為我可以使用相交運算,但這會用相交結果取代第一個陣列:
//Creates an Associative Array for each two columns
aa1=Associative Array (dt1:Name("KBR175_001") );
aa3=Associative Array (dt1:Name("NTE484_001") );
//Looks for overlap<BR />aa1 << intersect ( aa3 );
Show(N Items(aa1));
//If there is overlap, it combines the two Arrays into one, otherwise it returns "no"
if (N Items (aa1)>0, aa1<< Insert( aa3 ), Show("no"));但這只給了我aa1和aa3加上aa3或{“20-0002”,“20-0003”,“20-0005”,“20-0007”}的交集我已經排除了“20-0004”,它最初是aa1 的一部分。
我的問題分為兩部分:
1. 有沒有辦法比較數組,然後組合兩個數組以包含所有鍵?
2. 如何將所有陣列與所有其他陣列進行比較? 我假設某種 For 迴圈。
您是否想要這樣的東西,您可以在其中查看哪些組件尚未用於特定零件號碼?

抱歉,解釋令人困惑。 我希望這能澄清一點:最後,我想看到以下組{“20-0002”,“20-0003”,“20-0004”,“20-0005”,“20- 0007”}我可以與所有其他組件進行比較。 例如,KBR175、TRT330 或 KNW995 上未標註 20-0007 零件號,但我們建議將其作為替代品。
你的解釋讓我很困惑。是否可以提供您期望的輸出的一小部分樣本?