Hilfe beim Erstellen einer Spalte, die eine kumulative Summe basierend auf anderen Spalten darstellt<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich versuche, in JSL eine neue Spalte zu erstellen, die eine fortlaufende Summe der vorherigen Zeilen in dieser Spalte darstellt.Ich habe eine Spalte mit dem Namen „Total Daily Flow“. Ich habe auch eine Spalte, die angibt, von welchem Ort die Daten in „Total Daily Flow“ stammen (nennen Sie das „Site“). Sagen wir zum Beispiel am 1. Okt. (was in angegeben ist). Eine weitere Spalte mit dem Namen „Tag des Wassers im Jahr“). Ich habe einen täglichen Gesamtdurchfluss von 1000, und dieser Tag ist zufällig der erste Tag des Jahres.Ich möchte eine Spalte, deren erste Zeile = 1000 sein wird. Dann sagen wir, am zweiten Tag, der die zweite Zeile in der Tabelle sein wird, dem 2. Oktober, gibt es einen täglichen Gesamtfluss von 5000, ich möchte die neue Zeile in der neuen Spalte soll 1000 + 5000 = 6000 sein. Nehmen wir dann an, der 3. Oktober hat einen täglichen Fluss von 3000, also wird die nächste Zeile 6000 + 3000 = 9000 sein. Dies soll für jede Zeile in meiner Tabelle fortgesetzt werden, die denselben Standortnamen hat (Standort) und liegt im selben „Jahr“, wie in der Spalte „Tag des Wasserjahrs“ (1-365) angegeben.
Betreff: Hilfe beim Erstellen einer Spalte, die eine kumulative Summe basierend auf anderen Spalten darstelltIch freue mich, dass Sie es nützlich finden,
Vielleicht kann der Oneliner darauf basieren:
Betreff: Syntax: Wie erstelle ich eine Indexspalte nach ID?
es würde es auch unabhängig von der Sortierung machen und eine aktive Formel beibehalten.
aber ich bin mir nicht sicher, wie ich das angehen soll.
Am besten
Betreff: Hilfe beim Erstellen einer Spalte, die eine kumulative Summe basierend auf anderen Spalten darstelltHallo Ron,
Das ist eine großartige Lösung, danke für die Veröffentlichung.
Die Formel für die neue Spalte sumheightbysex weist einen leichten Tippfehler auf. Es sollte sein
If(Row() == 1, :height, :sex == Lag(:sex, 1), :height + Lag(:sumhightbysex, 1), :sex != Lag(:sex, 1), :height, Empty())
Verwenden Sie den Wert in der neuen Spalte, um die Höhe zu erhöhen, und nicht die Höhe aus der vorherigen Zeile, :height + Lag(:height), 1).
Tag auch
Betreff: Hilfe beim Erstellen einer Spalte, die eine kumulative Summe basierend auf anderen Spalten darstelltHi aporter ,
Bis jemand, der schlauer ist, einen One-Liner hat, können Sie meine Klempnerlösung ausprobieren:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "Row", formula( :Row() ), eval formula );
dt:row << delete formula;
// assuming age is time and sex is site
dt << Sort( By( :sex, :age ), Order( Ascending, Ascending ), replace table );
// now sum as you want it
dt << New Column( "sumhightbysex",
formula( If( Row() == 1, :height, :sex == Lag( :sex, 1 ), :height + Lag( :height, 1 ), :sex != Lag( :sex, 1 ), :height, Empty() ) ), eval formula
);
dt:sumhightbysex << delete formula;
// sort to original order
dt << Sort( By( :Row ), Order( Ascending ), replace table );
// clean up
dt << delete column (row);
Speak( "bob's your uncle" );
Betreff: Hilfe beim Erstellen einer Spalte, die eine kumulative Summe basierend auf anderen Spalten darstelltWenn Sie JMP Version 12 ausführen und mit der rechten Maustaste auf das Spaltenkopffeld in der Datentabelle klicken, sollte die Funktion „Neue Formelspalte -> Zeile -> Kumulativ“ funktionieren, ohne dass Sie auf JSL zurückgreifen müssen. Siehe unten:
