Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Nehmen Sie beispielsweise „Höhe“ als Beispiel und zählen Sie die aufeinanderfolgende Anzahl von „Höhen“ in der Zeile, die größer sind als die „Höhe“ in der vorherigen Zeile.
Ich habe eine Hilfsspalte h hinzugefügt, um zu bestimmen, ob die „Höhe“ der Zeile größer als die „Höhe“ der vorherigen Zeile ist, und dann die aufeinanderfolgende „Höhe“ der Zeile gezählt, die größer als die „Höhe“ der vorherigen Zeile ist die andere Spalte. Wenn die „Höhe“ kleiner als die „Höhe“ der vorherigen Zeile ist, muss eine Neuberechnung durchgeführt werden.

Wie kann diese Berechnung in einem Schritt durchgeführt werden?
Ich habe es versucht, aber es hat nicht funktioniert:
if(:height>Lag(:height,1),row()-Contains(:height[Index(1,Row())],:height<LAG></LAG>
- Danke!
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo allerseits,
Es hat eine Weile gedauert, aber schließlich habe ich herausgefunden, wie ich der vorherigen Zeile einen Wert hinzufügen kann, wenn die Bedingung wahr ist.
Deshalb möchte ich dies mit Ihnen teilen.Ich verwende dies, um sequentielle Werte innerhalb von Gruppen zu kennzeichnen.
Danke euch allen.
Beifall!
If( Row() == 1,
.,
If( :master == Lag( :master ),
If( :roll - Lag( :roll ) == 1,
:seq. rollt v3[Row() - 1] = 1,
.
)
)
)
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo John,
Ich sehe den Fehler, aber die von mir benötigten Berechnungen und Prüfungen werden nicht bereitgestellt.Mein letzter Beitrag zeigt eine neue Datentabelle und eine Formel, die in der Nähe sind.
Danke
Onjai
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Sieht so aus, als hätte das zweite If ein einzelnes = für die Zuweisung anstelle eines == für den Äquivalenztest.
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo,
Ich füge einen Teil meines tatsächlichen Datensatzes bei.Ich verfolge die Anzahl der :rolls, die nach :master sequentiell sind.Die Formel liegt nah beieinander, aber ich benötige sie trotzdem, um den Wert des ersten Vorkommens des sequentiellen Wurfs festzulegen, wenn die Differenz 1 beträgt.
If( :master == Lag( :master ),
If( Dif( :roll, 1 ) == 1,
Dif( :roll, 1 ),
.
),
.
)
Zum Beispiel muss ich den Wert von :sequential roll für Zeile 8 und 11 auf 1 setzen, weil die Differenz = 1 ist

Jede Hilfe wäre dankbar.
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo Jim,
Kein Problem.Ich habe die Spalte benannt, um zu zeigen, was ich als Endergebnis der Formel suchte.
Schauen Sie sich die Spalte „gewünscht von:Name“ für Carol an.
Die Höhenmessungen wurden drei aufeinanderfolgende Jahre lang durchgeführt (Alter 14, 15, 16).Aber die Formel zeigt 4.
Der Altersunterschied von Zeile zu Zeile sollte 1 betragen. Wenn etwas <>1 ist, sollte es leer sein.
Ich muss die Verzögerung um 1 erhöhen, bis der Wert <>1 ist. Dies sollte signalisieren, wenn ein Jahr bei der Höhenmessung versäumt wurde.

Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Ich verstehe die Regel für die Spalte „gewünscht von :name“ nicht.Am Ende der Zeilen fehlt ein Wert für Alice, aber zwei Zeilen mit fehlenden Werten für Carol und Chris und dann wieder nur eine Zeile mit fehlenden Werten für Clay.ich verstehe nicht
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo,
Fehler gefunden, aber die Formel berechnet Spalte 10 immer noch nicht wie gewünscht.
Alices Körpergröße wurde fünf Jahre in Folge gemessen.Ich brauche eine Spalte, um anzuzeigen, welche Zeilen aufeinander folgen.Clay hatte nur zwei aufeinanderfolgende Jahre Höhenmessungen.Carol hatte 3 aufeinanderfolgende Jahre Höhenmessungen, aber Spalte 10 zeigt 4.

Formel in Spalte 10:
If( Row() == 1,
hCounter = 0,
If( Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
hCounter
++),
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo ,
Ich bin mir nicht ganz sicher, was ich falsch mache, aber die If-Anweisung löst diesen Fehler aus.

dafür:
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) = :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Fügen Sie einfach eine IF()-Anweisung in die Formel ein, die prüft, ob Lag(:Name) != :Name vorliegt, und wenn nicht, setzen Sie Ihren Zähler auf den Ausgangspunkt zurück.
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Hallo,
Ich habe eine ähnliche Herausforderung.Ich muss jedoch die Anzahl der aufeinanderfolgenden (um 1 erhöht) Werte in einer Spalte berechnen.Zur Veranschaulichung füge ich das BigClass-Beispiel bei.

Ich habe Ihre Formel verwendet, um die Spalte :h basierend auf :age zu berechnen, wünsche mir aber eine Formel, die beim 1. Wert einer Sequenz beginnt und nach :name gruppiert wird.
Lässt sich das mit einer Formel erreichen?
Grüße,
Onjai
Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Looping ist hier eine gute Idee!
Danke, Jim!Betreff: Wie kann man die Anzahl aufeinanderfolgender Bedingungen direkt berechnen?Das Problem hat eine ziemlich einfache Lösung:
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Diese Version erzeugt fehlende Werte, wenn es 0 Verzögerungen gibt, die die Bedingung erfüllen, genau wie Ihre 2-Spalten-Lösung.Wenn Sie möchten, dass der resultierende Wert eine Null und kein fehlender Wert ist, verwenden Sie einfach:
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
hCounter;
Hier ist ein vollständiger Vergleich der beiden Methoden
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "h",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Row() == 1, 0, :height > Lag( :height, 1 ) ) )
);
dt << New Column( "Two Columns Used",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( :h == 1, Row() - Contains( :h[Index( 1, Row() )], 0, -1 ) ) )
);
dt << New Column( "All in one",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
)
);