Ich möchte eine Formel hinzufügen, um die 1. und 4. Zeile, dann die 2. und 5. Zeile, dann die 3. und 6. Zeile usw. zu subtrahieren. Bitte dringend um Hilfe!Hallo,
:RESULT ist die Spalte, in der ich Zeile 1 und Zeile 4, dann Zeile 2 und Zeile 5 usw. subtrahieren möchte, bis alle Zeilen fertig sind.
:TEST ist derzeit eine leere Spalte, in der ich die Ergebnisse der Spalte :RESULT speichern möchte
Ich habe das folgende Skript in der Formel ausprobiert, aber es funktioniert nicht? Nicht sicher warum?
:RESULT << Data Type( Numeric );
:TEST << Data Type( Numeric );
For( i = 1, i <= N Rows(), i++,
Abs( :RESULT[i] - :RESULT[i + 3] )
);
Ergebnisse teilen und kommunizierenBetreff: Ich möchte eine Formel hinzufügen, um die 1. und 4. Zeile, dann die 2. und 5. Zeile, dann die 3. und 6. Zeile usw. zu subtrahieren. Bitte dringend um Hilfe!Neben der Verwendung von Lag zur Berechnung gibt es hierfür auch eine spezielle Zeilenfunktion: Dif ( JSL-Syntaxreferenz > JSL-Funktionen > Zeilenfunktionen – Dif(col, n) ). Manchmal funktioniert es möglicherweise besser als die Verwendung von Lag.
Betreff: Ich möchte eine Formel hinzufügen, um die 1. und 4. Zeile, dann die 2. und 5. Zeile, dann die 3. und 6. Zeile usw. zu subtrahieren. Bitte dringend um Hilfe!Um mit verschiedenen Zeilen zu rechnen, empfehle ich außerdem die Funktion lag, die den Wert einer Zeile relativ zur aktuellen Zeile zurückgibt, und Sie benötigen keine Schleife.

Betreff: Ich möchte eine Formel hinzufügen, um die 1. und 4. Zeile, dann die 2. und 5. Zeile, dann die 3. und 6. Zeile usw. zu subtrahieren. Bitte dringend um Hilfe!Ihre Formel sollte keine For()-Schleife enthalten, es sei denn, Sie führen diese nicht als JMP-Formel, sondern als JSL in offenem Code aus.Wenn Sie den Code als Formel für die Spalte angeben, durchläuft JMP automatisch jede Zeile der Daten und wendet die Formel an.Daher ist die For()-Schleife nicht erforderlich. Nachfolgend finden Sie ein kleines Skript, das eine neue Spalte erstellt und dann eine Formel für die Spalte hinzufügt.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "The New Column",
formula( If( :ATT1 == 0, 0, Abs( :RESULT - :RESULT[Row() + 3] ) ) )
);
Wenn Sie eine leere Spalte haben (z. B. mit dem Namen „mytest“), können Sie eine For Each Row()-Funktion verwenden, um die Datentabelle zu durchlaufen und Werte zu berechnen
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
If( :ATT1 == 0,
:mytest = 0,
:mytest = Abs( :RESULT - :RESULT[Row() + 3] )
)
);
Schließlich können Sie, wie Sie angedeutet haben, eine For()-Schleife verwenden, um die Datentabelle zu durchlaufen.Dieser Code erfordert, dass man die spezifische Zeile angibt, die bearbeitet werden soll
Names Default To Here( 1 );
dt = Current Data Table();
For( i=1, i<=N Rows(dt), i++,
If( :ATT1[i] == 0,
:mytest[i] = 0,
:mytest[i] = Abs( :RESULT[i] - :RESULT[i + 3] )
)
);
Betreff: Ich möchte eine Formel hinzufügen, um die 1. und 4. Zeile, dann die 2. und 5. Zeile, dann die 3. und 6. Zeile usw. zu subtrahieren. Bitte dringend um Hilfe!Herausgefunden:
Musste Zeile aktualisieren:
Abs( :RESULT[i] - :RESULT[i + 3] )
Zu
:TEST[i]=Abs( :RESULT[i] - :RESULT[i + 3] )