Wie lassen sich doppelte Werte ermitteln?Hallo zusammen,
Ich habe diesen Code, bin mir aber nicht sicher, ob es dafür einen geeigneteren Ansatz gibt. Meine Schleife erhält einen Fehler, weil einige der Datentabellen mehrere NBO-Werte haben.
Daten außerhalb des gültigen Bereichs in Zeile 10 beim Zugriff oder bei der Auswertung von 'For Each' , For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[Tabelle << Zeilen abrufen, wobei (:Lot == "NBO" & :N Zeilen == Spalte Max( :N Zeilen, :Lot ) )]
= 1)
Ich versuche also, eine If-Anweisung innerhalb der For Each-Schleife zu erstellen. Die IF-Anweisung ermittelt, ob NBO keine Duplikate in der Lot-Spalte hat. Wenn keine Duplikate vorhanden sind, wird 1 in die Ref-Spalte eingetragen.
For Each( {table}, dt_Test,
table << New Column("Ref");
wait(0);
If (
//NBO has duplicate, deletes the NBO with lowest N Row value
dt_Test << Select duplicate rows(Match(:Lot)); //only selects the matching values, how can I delete the NBO with lowest N Rows count?
dt_Test << Delete Rows;
,
//if NBO has no duplicates,
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
);
);
Automatisierung und SkriptingWindowsBetreff: Wie ermittle ich doppelte Werte und lösche die Daten mit dem niedrigsten N-Zeilen-Wert?Es würde dies viel einfacher machen, wenn wir einige der Daten sehen könnten.
Betreff: Wie ermittle ich doppelte Werte und lösche die Daten mit dem niedrigsten N-Zeilen-Wert?Hier ist eine Beispieldatentabelle nach der Teilmenge. dt hat 2 NBOs und das funktioniert gut.
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
In dt2, wo ich 1 NBO habe, stoppt das Skript jedoch plötzlich und zeigt diesen Fehler an:
Daten außerhalb des gültigen Bereichs in Zeile 10 beim Zugriff oder bei der Auswertung von 'For Each' , For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[Tabelle << Zeilen abrufen, wobei (:Lot == "NBO" & :N Zeilen == Spalte Max( :N Zeilen, :Lot ) )]
= 1)
Betreff: Wie ermittle ich doppelte Werte und lösche die Daten mit dem niedrigsten N-Zeilen-Wert?Ich bin etwas verwirrt über Ihr Skript und was Sie versuchen zu tun. Versuchen Sie, doppelte Lose zu finden und alle bis auf die letzte Zeile zu löschen? Und dann NBO auf 1 setzen (es sollte nur noch eines übrig sein)?
Betreff: Wie ermittle ich doppelte Werte und lösche die Daten mit dem niedrigsten N-Zeilen-Wert?Entschuldigung, ich war auch beim Schreiben der Frage verwirrt. Also werde ich die Daten zunächst in eine Teilmenge aufteilen und dann jede Datentabelle durchgehen, um Spalte Ref und ihren Wert als 1 hinzuzufügen, wobei NBO die höchste Anzahl in N Zeilen hat. Das hier hat bei mir zunächst funktioniert:
For Each( {table}, dt_Test,
table << New Column("Ref");
wait(0);
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
);Aber wenn eine Schleife zu einer Datentabelle mit nur 1 NBO in der Spalte ausgeführt wird, tritt dieser Fehler auf:
Daten außerhalb des gültigen Bereichs in Zeile 10 beim Zugriff oder bei der Auswertung von 'For Each' , For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[Tabelle << Zeilen abrufen, wobei (:Lot == "NBO" & :N Zeilen == Spalte Max( :N Zeilen, :Lot ) )]
= 1)
Betreff: Wie ermittle ich doppelte Werte und lösche die Daten mit dem niedrigsten N-Zeilen-Wert?Vielleicht liegt das Problem woanders? Was enthält dt_test zum Beispiel? Und dt_test und table werden auf eine etwas seltsame Weise verwendet (auch das if funktioniert hier möglicherweise nicht so, wie Sie denken).

Ich würde Ihren Code ein wenig ändern, um das Debuggen zu erleichtern (platzieren Sie „get rows“ nicht innerhalb der []).
Names Default To Here(1);
dt = Open("$DOWNLOADS/dt.jmp");
dt2 = Open("$DOWNLOADS/dt2.jmp");
dts = Eval List({dt, dt2});
For Each({cur_dt}, dts,
cur_dt << New Column("Ref");
//cur_dt = dts[2];
sel_rows = cur_dt << get rows where(:Lot == "NBO" & :N Rows == Col Max(:N Rows, :Lot));
cur_dt:Ref[sel_rows] = 1;
);
Auf diese Weise können Sie die sel_rows drucken und sehen, ob sie leer sind / was sie haben
Betreff: Wie ermittle ich doppelte Werte?Ich würde vielleicht einen völlig anderen Ansatz vorschlagen.
1. Sortieren Sie die Tabelle nach Datum oder nach einer anderen Methode, die Ihnen sagt, welches das aktuellste Duplikat ist.
2. Verbinden Sie die Tabelle mit sich selbst (Tabellen>Verbinden) und klicken Sie auf die Option „Vielfache löschen“.
-Nur das erste Duplikat (in Zeilenreihenfolge) landet in der Produkttabelle.
tun Sie dies einmal manuell mit aktiviertem Workflow-Builder, und dann – peng – haben Sie das Skript, um es erneut zu tun. Skripting … ohne Skripting.
Betreff: Wie ermittle ich doppelte Werte?Guter Trick:)