Betreff: Col Median (und andere): Option "Wo" hinzufügen - Status geändert in: BestätigtHi @Hogi , Danke für deinen Vorschlag! Wir haben Ihre Anfrage erfasst und werden sie berücksichtigen.
Betreff: Col Median (und andere): Option „Wo“ hinzufügen – Status geändert in: Wird untersuchtBetreff: Col Median (und andere): Option „Wo“ hinzufügen – Status geändert in: Es gefällt uns! (in der Warteschlange)@hogi Dies wird genau untersucht, während wir daran arbeiten, die Verwendung von Where( )-Klauseln in JMP zu verbessern.Danke für den Vorschlag!
Betreff: Col Median (und andere): Option „Wo“ hinzufügenDanke 
Col Median (und andere): Option „Wo“ hinzufügen☐ coole neue Funktion
☑ könnte vielen Benutzern helfen!
☐ behebt einen „Bug“
☐ schön zu haben
☐ niemand braucht es
#myTop10_2022
Es gibt eine Reihe von Beiträgen mit Fragen zur Einschränkung der Col ... Aggregation Funktionen auf eine bestimmte Teilmenge.
Berechnen Sie den Spaltenmittelwert unter Einschränkung der verwendeten Beobachtungen
JMP10: Die Funktionen Col Max() und Col Min() haben die Daten aus der ausgeschlossenen Zeile zurückgegeben
Spaltenfunktionen und Zeilenzustände
Wie verwende ich die Col-Maximum-Formel mit einer „Wo“-Bedingung?
Daten in der Formel ausschließen
Anwendungsfälle:
- ausgeschlossen rows from the aggregation:
Col Max(if(not(excluded()), :weight,.),: sex)
or even shorter (if one doesn't need values in the excluded rows);
Col Max(:weight, :sex, :excluded())
- Benchmark some data with a reference data set (country A in Das post)
:data / Col Maximum(if(:country="A", :data,.))
Wie man in den obigen Beispielen sehen kann, ist die einfache Lösung eine If -Anweisung innerhalb der Spalte xyz- Aggregation:
col Mean( if(:sex=="M", :weight,.), :age);
col Mean( if(not(excluded()), :weight,.), :age)
Das Problem:
Der Ansatz ist EXTREM langsam – wenn die Teilmenge der if -Bedingung einen String-Vergleich enthält:
Wie-verwende-ich-die-Col-Maximum-Formel-mit-einem-Where/M78599
Dann skaliert die Zeit quadratisch mit der Zeilenanzahl und selbst bei kleinen Datensätzen mit nur einigen 1000 Einträgen dauert die Berechnung nur Sekunden .
Bei Datensätzen mit mehreren Millionen Einträgen würde das Monate dauern (!!!) - wird aber durch ein Timeout gestoppt und es erscheint eine Fehlermeldung. Nicht schön!
Mein Wunsch:
Beheben Sie den Fehler
Noch besser:
Bieten Sie eine zusätzliche Where -Option für Col xyz- Aggregationen
- das das Timing-Problem automatisch behebt: zuerst wird der Datensatz eingeschränkt, dann wird die Aggregation angewendet (--> viel schneller, auch wenn die coole „col...“-Beschleunigung einen Fehler hat)
- die Teilmengendefinitionen einfacher machen,
statt (*) brauchen Sie nur:
col Mean(:weight, :age, where(:sex=="M"))
col Mean(:weight, :age, where(not(excluded())))
Timing-Beispiele, von hier kopiert

korrigierte Version - in einer früheren Version zeigte der Screenshot [ms] statt [s]
weitere Wünsche eingereicht von 
Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungDatenzusammenführung und -bereinigungDatenexploration und -visualisierungMassenanpassungErgebnisse teilen und kommunizierenBetreff: Col Median (und andere): Option „Wo“ hinzufügenFür die Zeit, bis where(...) in einer zukünftigen Version von Jmp verfügbar sein wird, kann man die Spaltenaggregation über den Workaround um Größenordnungen beschleunigen
Ändern Sie den Datentyp in „Numerisch“ – oder verwenden Sie eine numerische Formelspalte.
https://community.jmp.com/t5/Discussions/Tips-and-Tricks-best-practice-with-JMP-JSL/td-p/662686
Betreff: Col Median (und andere): Option „Wo“ hinzufügenDanke, @SamGardner , @Sarah-Sylvestre , es ist jetzt in JMP18 verfügbar : )
Bevor Sie den Status auf „Geliefert“ ändern, könnten Sie bitte prüfen, ob die Verwendung von „Wo“ wie in diesem Snippet vorgesehen ist?
Im Vergleich zum ursprünglichen Ansatz ist es extrem langsam : (
dt = Open( "$SAMPLE_DATA/Airline Delays.jmp" );
Print("old aproach");
t0 = hptime();
New Column( "max - 1st of month",
Formula( Col Maximum( if(:Day of Month == 1 , :Arrival Delay,.), :Month) )
);
dt << run formulas();
show((hp time()-t0)/1000000); // 0.5s
Print("new aproach - with Where");
t0 = hptime();
New Column( "max - 1st of month",
Formula( Col Maximum( :Arrival Delay, :Month, Where( :Day of Month == 1 ) ) )
);
dt << run formulas();
show((hp time()-t0)/1000000); // 140s
Betreff: Col Median (und andere): Option „Wo“ hinzufügenPrint("new aproach - with Where, semi-bugfix");
t0 = hptime();
myWhere = Where( :Day of Month == 1 ) ;
Eval (Eval Expr(New Column( "max - 1st of month",
Formula( Col Maximum( :Arrival Delay, :Month, Expr(myWhere) )
))));
dt << run formulas();
show((hp time()-t0)/1000000); // 40s - better but still way too slow ...Betreff: Col Median (und andere): Option „Wo“ hinzufügenAh, funktioniert noch nicht : (
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "max - 1st of month",
Formula( Col Minimum( :weight, :sex, Where( :age ==17 ) ) )
);