Wie verwende ich die Col-Maximum-Formel mit einer „Where“-Bedingung?Hallo, ich habe ein Problem wo ich eine neue Spalte als Benchmark zu allen anderen Ländern formulieren möchte. Wenn es mehr Zeilen für das Land gibt, möchte ich den maximalen Wert davon als Benchmark nehmen. Siehe das Beispiel unten zur Verdeutlichung.
Daten sehen in etwa so aus:
Land Wertzeitraum
A 10 201301
A 30 201301
B20 201301
C50 201301
D 40 201301
Was ich erreichen möchte (mit Zellformel): Col Maximum (:value, :period, :country) wo :land == "A"
Ausgabe:
Land Wertzeitraum Benchmark
A 10 201301 30
A 30 201301 30
B 20 201301 30
C50 201301 30
D 40 201301 30
Wie Sie sehen können, möchte ich nur den Maximalwert von Land A vergleichen.
Ich habe Col Maximum (:value, :period, :country == "A") ausprobiert und es wird "50" zurückgegeben.
Col Maximum (:value, :period, :country) und Col Maximum (:value, :period, :country == "A") geben beide "50" zurück
Ich bin mir ziemlich sicher, dass es dafür eine einfache Lösung gibt!
Hoffe ihr könnt helfen!
Danke Danke!
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Interessante Frage - warten Sie noch auf eine Antwort?
Es gibt eine Reihe von Beiträgen mit ähnlichen Fragen, wie man das einschränken kann Col ... Aggregation Funktionen zu einer bestimmten Teilmenge.
(hauptsächlich: beschränken Sie sie auf die Teilmenge der nicht ausgeschlossenen Zeilen)
https://community.jmp.com/t5/Discussions/Compute-Column-Mean-while-restricting-observations-used/mp/10377#M10055
https://community.jmp.com/t5/Discussions/JMP10-Col-Max-and-Col-Min-functions-returned-the-data-from/td-p/10555
https://community.jmp.com/t5/Discussions/Col-Functions-and-Row-States/td-p/351705
Die Idee:
Interessiert man sich für die mittlere Körpergröße, kann man über alle Reihen aggregieren – oder man kann männliche und weibliche Einträge separat aggregieren.
Für die zweite ist die Lösung fast so einfach wie für die erste: Verwenden Sie einfach eine zusätzliche GroupBy-Variable, um zwischen gewünschten und unerwünschten Daten zu trennen.
Aber was ein Benutzer oft zusätzlich braucht: die Werte sollten in allen entsprechenden Zeilen erscheinen (also auch für weiblich).
[Das Beispiel mit der Benchmark-Spalte im Ursprungspost verdeutlicht, warum ein solches Verhalten sinnvoll sein könnte.]
Mit dem GroupBy ist es einfach, die richtigen Werte zu bekommen - aber wie man sie auf ALLE Zeilen verteilt.
Wenn sich hinter a so etwas wie eine Nachschlagetabelle befindet Col ... Aggregation Funktion verwendet die Funktion denselben Bezeichner
1) zum Aufteilen von Zeilen in verschiedene Gruppen für die Aggregation ("M" / "F"):
Judy ist weiblich, das Gewicht in Judys Zeile sollte mit einbezogen werden weibliches mittleres gewicht
2) als Index beim Lesen eines Eintrags aus der Nachschlagetabelle ("M" / "F"):
Judy ist weiblich, sollte die neue Kolumne enthalten weibliches mittleres gewicht in Judys Reihe
Also erhalten entweder Mann und Frau die gleichen Werte, weil der Identifikator gleich ist (Mittelwert1) - oder sie erhalten unterschiedliche Werte, weil der Identifikator unterschiedlich ist (Mittelwert2).
ergo:
Ein Jmp-Benutzer kann Verwenden Sie die GroupBy-Funktion, um Werte aus der Berechnung zu entfernen über:
- Berechnung unterschiedliche Werte für verschiedene Untergruppen
- Dump die unerwünschten Ergebnisse
aber dann bekommt er
- erhalten unterschiedliche Werte für verschiedene Untergruppen
kostenlos - auch wenn er diese Option nicht bestellt hat (OK, der Code erzählt eine andere Geschichte - aber denken wir darüber nach, was der Benutzer wollte) 
Gibt es eine einzeiliger Befehl weiblich aus der Mittelwertbildung zu entfernen, aber die Werte in die entsprechenden Zeilen mit „weiblich“ zu schreiben?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("mean1", Formula(Col Mean(:weight, :age)));
dt << New Column("mean2", Formula(Col Mean(:weight, :age, :sex)));
dt << New Column("mean2", Formula(If(:sex=="M", Col Mean(:weight, :age, :sex))));
dtM = dt << subset( Rows( dt << get rows where( :sex== "M" ) ), selected columns( 0 ));
dtM << New Column("mean_M", Formula(Col Mean(:weight, :age)));
dt << Update(
With( dtM ),
Match Columns(:age = :age ),
Add Columns from Update Table( :mean_M ),
Replace Columns in Main Table( None )
);
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Danke.Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Col Maximum() ist nur in einer Formel sinnvoll, wo ein separates Ergebnis pro Zeile ausgegeben wird.Um das zu tun, was Sie wollen, verwenden Sie die Summarize()-Funktion.
Sehen:
Hilfe==>Scripting-Index==>Zusammenfassen
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Hallo Mark,
versucht, das maximale Gewicht nach Alter oder Geschlecht zu ermitteln, erzeugt aber im folgenden Skript nur einen Wert.
nach Alter, es gab 6 verschiedene Altersgruppen, für jede möchte ich das maximale Gewicht für jedes Alter berechnen.
Names Default To Here( 1 );
Clear Log();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
max_weight_by_age = Col Max( :weight, :age );
max_weight_by_sex = Col Max( :weight, :sex );
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Ich könnte diese Formel zu einer neuen Spalte in der Beispieldatentabelle Big Class hinzufügen:
Col Max( :weight, :age )
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Hallo Mark,
Können Sie ein Beispiel für die Verwendung von geben, wenn Sie col Max verwenden?
Danke.Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Siehe Hilfe > Skripting-Index > Funktionen:

Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Danke Jim, ich meinte nur zusammenfassen. Wie ich es mache (zwei jsl-Befehle):
Fassen Sie in der Spalte zusammen, erstellen Sie eine neue Tabelle mit Werten (min/max/oder eine andere Statistik für die Spalte).
Dann aktualisiere ich die Haupttabelle mithilfe der zusammengefassten Tabelle, indem ich die Zeileneinträge abgleiche.
Ich war nur neugierig, ob es im Befehl Max col () eine bedingte Option gibt, die eindeutige Spaltenwerte identifizieren und diesen zusätzlichen Schritt überflüssig machen kann. (würde einen zusätzlichen Tisch und 2 zusätzliche Schritte beseitigen).
Schätze deine Hilfe.
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Normalerweise verwende ich die Summarize()-Funktion anstelle der Summary Platform, um einfach zu bestimmen, welche Ebenen in einer Spalte gefunden werden.Von dort aus müssen Sie nur noch die Formeln generieren, die Sie benötigen, um die Arbeit zu erledigen.
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Angenommen, die Länderspalte hat mehrere Namen und ich kenne nicht alle möglichen Werte. Wie kann diese Abfrage dahingehend angepasst werden.
Ich kann das tun, indem ich eine Übersichtstabelle erstelle und die Tabelle dann zurückaktualisiere, aber das scheint eine ineffiziente Methode zu sein, ich war neugierig, ob es in einem einzigen Schritt wie diesem gemacht werden könnte.
Danke im Voraus.
Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?Entschuldigung für die späte Antwort! Danke für die Lösung!Re: Wie verwende ich die Col-Maximum-Formel mit einer "Where"-Bedingung?In Anbetracht der Art und Weise, wie Sie Ihre Bedürfnisse angegeben haben, vorausgesetzt, Sie wissen, in welchem Land die mehreren Einträge vorhanden sind.
dt = Current Data Table();
rowperiod = :Period[Row()];
Max(
:Value[dt << get rows where(
:Country == "A" & :period == rowperiod
)]
);