Gruppen erstellen und vergleichen – Assoziative Arrays?Guten Morgen!! Ich stoße schon seit ein paar Wochen mit dem Kopf gegen die Wand und versuche, das herauszufinden, aber mir sind die Ideen ausgegangen.
Ich möchte alle Prime/Alternatives auf einer Build-Liste in Gruppen zusammenfassen, die ich dann mit allen anderen Prime/Alternatives auf anderen Build-Listen vergleichen und eine Empfehlung aussprechen kann, Alternates zu anderen Teilenummern hinzuzufügen, basierend auf dem verwendeten Prime.
Im Anhang finden Sie eine Beispieldatei. Der Einfachheit halber habe ich alle Prime/Alternate-Gruppen mit derselben Zahl beginnen lassen (z. B. 20 oder 40), aber die letzten Ziffern sind unterschiedlich. Anfängliche Gruppen von Teilenummern können gebildet werden, indem die Baugruppe und der Standort betrachtet werden. Anschließend können Gruppen zu anderen hinzugefügt werden, wenn sie Gemeinsamkeiten aufweisen. Ich habe versucht, assoziative Arrays zu verwenden, bin mir aber nicht sicher, ob das der richtige Ansatz ist.
Vielen Dank im Voraus für jede Hilfe, die Sie anbieten können!
Betreff: Gruppen erstellen und vergleichen – Assoziative Arrays?Vielen Dank an alle für Ihren Beitrag!Ich teilte das Problem einem Kollegen mit und er entwickelte einen alternativen Ansatz – eher einen Brute-Force-Ansatz.
Im Anhang finden Sie das Skript, das das tut, was ich suche.Im Grunde verknüpfen wir die Tabelle selbst, um die Teilenummern in Gruppen zusammenzufassen, und verknüpfen sie dann erneut am Montageort, um alle Teilenummern zu erhalten.
Nach einigem Zusammenfassen und Hin- und Hertransponieren ist das Ergebnis eine Liste, die alle Alternate/Prime-Gruppen in einer einzigen Spalte enthält, die durch einen Gruppierungswert gekennzeichnet ist.
Danke noch einmal!
Brian
Betreff: Gruppen erstellen und vergleichen – Assoziative Arrays?@SirBWhite Sie stellen ein interessantes Problem dar, und ich gehe davon aus, dass es hierfür elegante Methoden gibt. Jims, @txnelson Der Vorschlag brachte mich dazu, über Blasensortierungen und Ähnlichkeitstypanalysen nachzudenken.Ich gehe davon aus, dass es einige Text-Mining-Lösungen und Textentfernungsmetriken gibt, die dies zu einer einfachen Aufgabe machen würden.
Basierend auf Ihrer Diskussion mit Jim würde ich die Daten neu organisieren:
- Teilen Sie den Tisch und
- Ordne es
Die resultierende Tabelle (ein Ausschnitt ist unten dargestellt) würde die Auswahl vergleichbarer Baugruppen drastisch reduzieren.

Hier ist ein grafisches Bild dieser Tabelle

Das Skript dazu ist beigefügt.Was ich tun würde, ist Folgendes:
- Fügen Sie in der ursprünglichen Spalte eine Spalte mit dem Namen „Typcode“ hinzu, die 2 ist, wenn Typ = PRM und 1, wenn Typ = ALT.
- Teilen Sie dann die Tabelle (temp) auf und kodieren Sie das Fehlende mit Null neu
- Ich würde die Tabelle trotzdem sortieren, aber das ist unnötig.
Diese Tabelle, in der die Teilespalten jetzt numerische Spalten sind, kann in Cluster-Algorithmen und Algorithmen für den nächsten Nachbarn verwendet werden.
Betreff: Gruppen erstellen und vergleichen – Assoziative Arrays?Danke @txnelson !Ich mag diesen Ansatz, aber nicht alle meiner Baugruppen können mit den gleichen Teilenummern erstellt werden und es wäre schwierig, Tausende von Baugruppen und Teilen zu betrachten.Wahrscheinlich habe ich mein Beispiel zu sehr vereinfacht und eine sehr komplexe Erklärung darüber hinzugefügt.
Ich habe einige Fortschritte bei einem Ansatz gemacht, von dem ich denke, dass er funktionieren wird.Ich konnte herausfinden, wie man dynamisch assoziative Arrays für jeden Montageort und die dazugehörigen Teilenummern erstellt.Hier ist das Skript:
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;
Jetzt möchte ich jedes Array mit den anderen vergleichen und prüfen, ob es Überschneidungen gibt.Wenn ja, möchte ich die Arrays kombinieren. Schauen Sie sich zum Beispiel KBR175-001 an (20-0002, 20-0003, 20-0004, 20-0005), TRT330-003 (20-0002, 20-0003, 20-0004), NTE484-001 (20-0002, 20-0003, 20-0005 , 20-0007), KNW995-002 (20-0002, 20-0003, 20-0004, 20-0005). Das Ergebnis wäre: (20-0002, 20-0003, 20-0004, 20-0005, 20-0007).
Ich dachte, ich könnte die Schnittoperation verwenden, aber das ersetzt das erste Array durch die Ergebnisse der Schnittmenge:
//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"));Aber das gibt mir nur den Schnittpunkt von aa1 und aa3 plus aa3 oder {"20-0002", "20-0003", "20-0005", "20-0007"}. Ich habe "20-0004" ausgeschlossen, was ursprünglich war Teil von aa1.
Meine Frage besteht aus zwei Teilen:
1. Gibt es eine Möglichkeit, Arrays zu vergleichen und dann beide Arrays zu kombinieren, um alle Schlüssel einzuschließen?
2. Wie würde ich alle Arrays mit allen anderen Arrays vergleichen? Ich gehe von einer Art For-Schleife aus.
Betreff: Gruppen erstellen und vergleichen – Assoziative Arrays?Möchten Sie so etwas, wo Sie sehen können, welche Baugruppen für bestimmte Teilenummern nicht verwendet wurden?

Betreff: Gruppen erstellen und vergleichen – Assoziative Arrays?Entschuldigung für die verwirrende Erklärung. Ich hoffe, dass dies etwas Klarheit schafft: Ganz am Ende würde ich gerne die folgende Gruppe sehen {"20-0002", "20-0003", "20-0004", "20-0005", "20- 0007“}, die ich mit allen anderen Baugruppen vergleichen kann. Beispielsweise wird die Teilenummer 20-0007 bei KBR175, TRT330 oder KNW995 nicht genannt und ich möchte diese als Alternative empfehlen.
Betreff: Gruppen erstellen und vergleichen – Assoziative Arrays?Ihre Erklärung verwirrt mich.Wäre es möglich, eine kleine Auswahl dessen bereitzustellen, was Sie als Ergebnis erwarten?