So verwenden Sie die Dif/Lag-Funktion nach Spaltengruppe<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo JMP-Community-Leute,
Ich habe eine Datentabelle mit vier Spalten: Box, iClass, BinPos und Slot.iClass bedeutet Produktebene 24, BinPos bedeutet die Boxposition in der Sortieranlage und Slot gibt an, an welcher Slotposition das Produkt in der Box platziert werden soll. Die Box ist für eine maximale Menge von 100 Produkten ausgelegt, danach wird eine neue leere Box hineingelegt. Um zu überprüfen, ob das Produkt in der richtigen Box platziert ist und die Slot-Inkrementierung genau „1“ beträgt (weil ich manchmal manuell beobachtet habe, dass die Slot-Inkrementierung um >1 oder Inkrement=0 ansteigt, was bedeutete, dass der Platzierungsautomat Probleme hatte), habe ich versucht, die Dif/Lag-Funktion zu verwenden, um die Inkrementierung zu überprüfen. Allerdings erlaubt mir die Dif/Lag-Formel nicht, eine Funktion zur Gruppierung nach Box-Spalte hinzuzufügen. Die Box ist eigentlich die eindeutige Kennung.
Eine Formel wie Dif(:Slot,1) kann mir den Unterschied b/wa sicher in Bezug auf die Zeile davor sagen. Aufgrund der unterschiedlichen Produktzugehörigkeit zur iClass-Spalte werden die Zeilen jedoch mit unterschiedlichen Boxen gemischt.
Ich hoffe, dass ich eine Formel wie Dif(:Slot, 1, :Box) ausarbeiten kann. Kann ein Experte Hinweise geben, um das herauszufinden? Zur Untersuchung ist eine Beispieltabelle beigefügt.
Vielen Dank im Voraus
| Kasten | iClass | BinPos | Slot |
| 72813_2 | 11 | 11 | 64 |
| 73213_2 | 15 | 15 | 2 |
| 73213_2 | 15 | 15 | 3 |
| 73213_2 | 15 | 15 | 4 |
| 73213_2 | 15 | 15 | 5 |
| 73213_2 | 15 | 15 | 6 |
| 73213_2 | 15 | 15 | 7 |
| 73213_2 | 15 | 15 | 8 |
| 73214_2 | 14 | 14 | 1 |
| 73214_2 | 14 | 14 | 2 |
| 73214_2 | 14 | 14 | 3 |
| 73214_2 | 14 | 14 | 4 |
| 73214_2 | 14 | 14 | 5 |
| 73214_2 | 14 | 14 | 6 |
| 73213_2 | 15 | 15 | 9 |
| 73214_2 | 14 | 14 | 7 |
| 73213_2 | 15 | 15 | 10 |
| 73213_2 | 15 | 15 | 11 |
| 73213_2 | 15 | 15 | 12 |
| 73213_2 | 15 | 15 | 13 |
| 73213_2 | 15 | 15 | 14 |
| 73213_2 | 15 | 15 | 15 |
| 73214_2 | 14 | 14 | 8 |
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeHier ist eine Überarbeitung der vorherigen Formel.Diese Formel funktioniert mit JMP 14
If( Row() == 1,
dt = Current Data Table()
);
i = Row();
holdBox = :Box;
allrows = dt << get rows where( holdBox == :Box[i] );
If( Loc( As List( allrows ), i )[1] == 1,
1,
:Slot[allrows[Loc( As List( allrows ), i )[1]]] - :Slot[allrows[Loc( As List( allrows ), i )[1] - 1]]
);
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeHier ist ein kleines Skript, das Ihnen die gewünschten Ergebnisse für das Entfernungsdatum liefern soll
Names Default To Here( 1 );
dt = Current Data Table();
// Add a sequence column to capture the current
// order of the data table
dt << New Column( "tableorder", formula( Row() ) );
// Convert the values in the tableorder column to real values
dt:tableorder << delete formula;
// Sort the table in ascending order
dt = dt << Sort(
By( :Tool, :Part, :Install Date ),
Order( Ascending, Ascending, Ascending ),
replace table( 1 )
);
// Create the Remove Date Column
dt << New Column( "Remove Date", Format( "m/d/y", 10 ) );
// Loop across all of the rows and set the Remove Date
For( i = 2, i <= N Rows( dt ), i++,
If( :Tool[i] == :Tool[i - 1] & :Part[i] == :Part[i - 1],
:Remove Date[i - 1] = :install Date[i]
)
);
// Sort the table back to original order
dt = dt << Sort( By( :tableorder ), Order( Ascending ), replace table( 1 ) );
// Remove the tableorder column
dt << delete columns( "tableorder" );
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeJim,
Ich nehme es zurück – die Formel funktionierte nicht, weil sie den Ausdruck „Get Rows Where“ nicht kannte. Sobald ich den Spaltentyp (es war ein Datum, also war es mir eigentlich egal) in „Numerisch“ änderte, funktionierte es, auch wenn die Option „Zeilen wo abrufen“ immer noch nicht gefällt.
Im Grunde versuche ich, das vorherige Datum nach Spalte zu finden.
Ich habe eine Tabelle mit der Historie des Teileaustauschs für verschiedene Werkzeuge:
| Werkzeug | Teil | Installationsdatum | Datum entfernen |
| Werkzeug A | Teil 1 | 03.03.2015 | ??? |
| Werkzeug B | Teil 1 | 04.04.2015 | ??? |
| Werkzeug A | Teil 2 | 05.05.2015 | ??? |
| Werkzeug A | Teil 1 | 06.06.2015 | ??? |
| Werkzeug A | Teil 2 | 07.07.2015 | ??? |
| | | | |
Für dasselbe Werkzeug und dasselbe Teil muss ich also das NÄCHSTE Installationsdatum ermitteln und es als Entfernungsdatum für das aktuelle Teil angeben.
Nun bin ich mir nicht sicher, wie Sie sicherstellen können, dass tatsächlich das NÄCHSTE Datum angezeigt wird. Die Formel funktioniert mit den minimalen Änderungen, wie ich anhand der begrenzten Beobachtungen feststellen kann, aber soweit ich die Formel verstehe, würde sie nicht ...
Könnten Sie mir bitte beim Aufräumen helfen?
Danke,
M.
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeJim,
Dies ist eine sehr wertvolle Problemumgehung, da sie eine Funktionalität einer nicht existierenden Formel ColLag(); bietet. 

Ich sehe jedoch, dass es schon eine ganze Weile her ist, seit Sie diesen Workaround gepostet haben. Heutzutage gefällt JMP 14 nicht, wie es geschrieben ist. Es heißt, Get Rows Where sei eine unbekannte Funktion und es heißt, dass die Verwendung von Current Data Table() in Formeln nicht stabil sei.
Gibt es eine neuere Version dieser Problemumgehung?
Danke,
M.
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeWenn Sie mehr Genauigkeit beim Timing benötigen, hat @msharp in einem aktuellen Beitrag darauf hingewiesen:
Today() ist nur auf die Sekunde genau, Tick Seconds() ist auf 1/60 Sekunde genau und HP TIME() ist auf die Mikrosekunde genau.
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeBei so vielen Zeilen wäre die Verwendung der Sortiermethode schneller.Unten ist die Methode, die ich verwende, um die Zeit zu ermitteln, die ein Skript benötigt:
start = heute();
Das Skript oder der Teil eines Skripts, für das Sie die Zeitangaben ermitteln möchten
show( today() - start );
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeHallo Jim,
Danke für die Hilfe. Tatsächlich habe ich mehr als 60.000 Zeilen in einer einzigen Tagestabelle. Wenn ich eine von Ihnen bereitgestellte Formel ausführe, würde das ziemlich lange dauern.
Wäre es schneller, wenn ich zuerst die Daten sortiere und dann die Formel ausführe?
Gibt es übrigens eine Möglichkeit für jmp, die Ausführungszeit eines Skripts oder einer Formel zu zählen?
Grüße,
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeDas Beispiel ist eine Formel für eine neue Tabelle, kein eigenständiges JSL-Skript.Erstellen Sie eine neue Spalte und fügen Sie die Formel in die Formel für die Spalte ein. Dadurch werden die gewünschten inkrementellen Werte generiert.



Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeHallo Jim,
Ich habe versucht, das von Ihnen erstellte Skript auszuführen (kopieren Sie einfach das gesamte Skript und fügen Sie es ein), kann jedoch keine Änderung in der Datentabelle feststellen und keine neue Spalte generieren.
Ich habe versucht, mit Ihrem Skript eine neue Spalte zu erstellen, aber es hat auch nichts funktioniert.
Dies ist das Skript, das ich ausführen wollte:
i = Row();
allrows = Current Data Table() << Zeilen abrufen where( :Box_ID == :Box_ID );
allrows<< New Column("Test", Numeric, Continuous, Formula(If( Loc( As List( allrows ), i )[1] == 1,
1,
Slot[allrows[Loc( As List( Allrows ), i )[1]]] - Slot[allrows[(Loc( As List( Allrows ), i )[1])-1]]
)));
Grüße,
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeWenn die absolute Reihenfolge der Originaldaten nicht wichtig ist, funktioniert das Sortieren der Daten und die Verwendung der Dif-Funktion.Hier ist jedoch eine Formel, mit der Sie das Inkrement berechnen können, ohne die Daten sortieren zu müssen.
ich = Reihe () ;
erlaubt = Aktuelle Datentabelle () << Holen Sie sich Zeilen wo ( : Kasten == : Kasten [ ich ] ) ;
Wenn ( Ort ( Als Liste ( erlaubt ) , ich )[ 1 ] == 1 ,
1 ,
Slot [ erlaubt [ Ort ( Als Liste ( erlaubt ) , ich )[ 1 ]]] - Slot [ erlaubt [( Ort ( Als Liste ( erlaubt ) , ich )[ 1 ]) - 1 ]]
) ;
Betreff: So verwenden Sie die Dif/Lag-Funktion nach SpaltengruppeKönnen Sie nach :Box sortieren und dann die Formel anwenden, nachdem Sie überprüft haben, dass :Box==Lag(:Box,1)?