Rufen Sie Zeilen ab, die eine Bedingung innerhalb einer Spaltenformel erfüllenAlle,
Wahrscheinlich eine einfache Frage - aber ich suche nach Hilfe. Gibt es eine Möglichkeit, Zeilen zu erhalten, die einer Bedingung innerhalb einer Spaltenformel entsprechen?
In dem unten gezeigten Beispiel sollte man in der Lage sein, die gruppierte Summe einer bestimmten Gruppe zu erreichen. Wenn ich noch eine Bedingung hinzufügen wollte, sagen wir on :height should be > 60 , wie kann ich das erreichen.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("CondSum",Numeric,Continuous,Formula(Col Sum(:weight,:age)));Außerhalb einer Spaltenformel glaube ich, dass das einfach ist und es erreichen kann. Ich möchte dies jedoch nach Möglichkeit über eine Spaltenformel implementieren.
Betreff: Zeilen abrufen, die eine Bedingung innerhalb einer Spaltenformel erfüllenDie Formel scheint nur ausgewertet zu werden, wenn sich die Altersspalte ändert.Die folgende Formel scheint jedoch, um Ihnen das zu geben, was Sie wollen
myheight = :height;
myage = :age;
Sum( :weight[Current Data Table() << get rows where( :age == myage & :height >= myheight )] );
Betreff: Zeilen abrufen, die eine Bedingung innerhalb einer Spaltenformel erfüllenDaher vermute ich, dass es etwas damit zu tun hat
Das Ergebnis wird intern zwischengespeichert, sodass mehrere Auswertungen effizient sind
Kann es aber nicht genau sagen.Wenn Sie nur eine Zwischensäule verwenden, scheint es gut zu funktionieren.
Names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New COlumn("Conditional", Formula(
myheight = :height;
:height >= myheight; // should always be 1
//:height >= .5*weight // this might be a better example
));
dt << New Column("CondSum",Numeric,Continuous,Formula(
Col Sum( :weight, :age, :Conditional );
));Betreff: Zeilen abrufen, die eine Bedingung innerhalb einer Spaltenformel erfüllenHallo, es ist eine nette Idee, einen Vergleich als byVar-Argument einzufügen:
Col Sum( :weight, :age, :height >= 60 )
Ich bin daran interessiert, einen Vergleich in das byVar-Argument zu setzen, das es mit der aktuellen Zeile vergleicht:
myheight = :height;
Col Sum( :weight, :age, :height >= myheight )
Das funktioniert nicht wie erwartet: Die Berechnung zeigt eine verwirrende Menge von Zahlen, und dann ändern sich alle auf "1", wenn ich die Größe von jemandem ändere.
Gibt es eine Möglichkeit, dies zu tun?
(Nur für einen besseren Bezugsrahmen versuche ich in meiner aktuellen Tabelle, Zeilen zu zählen, in denen das Datum in colA größer als der Datumswert in colA ist und in denen das Datum in colB kleiner als der Datumswert in colB ist.)
Betreff: Zeilen abrufen, die eine Bedingung innerhalb einer Spaltenformel erfüllenHallo Uday,
Sie können die Bedingung tatsächlich einfach als nächstes Argument eingeben.
Col Sum( :weight, :age, :height > 60 )
In diesem Big-Class-Beispiel sieht es auf den ersten Blick vielleicht nicht richtig aus, da die Summe für die 12-Jährigen unter und über 60 Zoll gleich ist.Es sind nur zufällig die gleichen Summen.
Betreff: Zeilen abrufen, die eine Bedingung innerhalb einer Spaltenformel erfüllenSehr cooler Trick, Bedingungen als zu verwenden Gruppiere nach Optionen 
Wichtig zu beachten:
Mit dem vorgeschlagenen Code jede Bedingung
1) :Höhe <=60
2) :Höhe > 60)
bekommt sein eigenes Ergebnis.
Es gibt eine weitere Variante, bei der die Bedingung verwendet wird, um die Aggregation einzuschränken eins Teilmenge - und das Ergebnis wird in alle Zeilen der jeweiligen Gruppe geschrieben. Wie in der letzten Spalte dieser Tabelle:

Eine Möglichkeit dorthin zu gelangen:
Verwenden Sie Tabellen/Zusammenfassungen mit einem Datenfilter (neu in Jmp 17) und führen Sie die Werte wieder in die Haupttabelle ein:
Mehr sehen...
Andere Ansätze (mit unterschiedlichen Geschwindigkeiten) werden in besprochen Wie verwende ich die Col-Maximum-Formel mit einer „Wo“-Bedingung?