Schließen Sie Zeilen in der Spaltenquantilberechnung ausHallo,
Ich habe versucht, Col Quantile (:height, 0.5, :class) zu erhalten, aber es sieht so aus, als würde die Berechnung die ausgeschlossenen Zeilen immer noch berücksichtigen.
Gibt es eine Möglichkeit, die ausgeschlossenen Zeilen in die Col Quantile-Berechnung abzulehnen?
Danke,
Midori
SkripterstellungBetreff: Zeilen in der Spaltenquantilberechnung ausschließenSie können in der Funktion Col Quantile() prüfen, ob die Zeile ausgeschlossen wurde.Unten ist ein Beispiel
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "Col Quantile Height by Age",
numeric,
continuous,
formula( Col Quantile(If(excluded(rowstate(Row())),., :height), 0.5, :age ) )
);
Immer wenn sich der ausgeschlossene Zeilenstatus für die Zeilen in der Datentabelle ändert, berechnet die Formel neue Werte
Betreff: Zeilen in der Spaltenquantilberechnung ausschließenIch habe versucht, mit dem folgenden Code eine Schleife zu erstellen, um das 50. Perzentil vieler Parameter zu erfassen, aber beide Elemente in „test_list“ sind gleich (beide haben 50 % der Gewichtung). Wenn ich die Zeilen jedoch manuell ausführe, funktioniert es. Kann ich die Funktion Col Quantile() nicht in der for-Schleife verwenden?
Namen standardmäßig hier( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
plot_param={
Höhe,
Gewicht};
test_list={};
for(plotcnt=1, plotcnt<=nitems(plot_param), plotcnt++,
pct_50=Col Quantile( If(excluded(rowstate(Row())),., Column(plot_param[plotcnt])), 0.5);
test_list[plotcnt]=pct_50;
);
Betreff: Zeilen in der Spaltenquantilberechnung ausschließen
Ich habe versucht, mit dem folgenden Code eine Schleife zu erstellen, um das 50. Perzentil vieler Parameter zu erfassen, aber beide Elemente in „test_list“ sind gleich (beide haben 50 % der Gewichtung). Wenn ich die Zeilen jedoch manuell ausführe, funktioniert es. Kann ich die Funktion Col Quantile() nicht in der for-Schleife verwenden?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
plot_param={
height,
weight};
test_list={};
for(plotcnt=1, plotcnt<=nitems(plot_param), plotcnt++,
pct_50=Col Quantile( If(excluded(rowstate(Row())),., column(plot_param[plotcnt])), 0.5);
test_list[plotcnt]=pct_50;
); Betreff: Zeilen in der Spaltenquantilberechnung ausschließenNames Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
plot_param={
height,
weight};
test_list={};
for(plotcnt=1, plotcnt<=nitems(plot_param), plotcnt++,
Eval (Substitute (Expr(pct_50=Col Quantile( If(excluded(rowstate(Row())),., _col_), 0.5)), Expr(_col_), column(plot_param[plotcnt])));
test_list[plotcnt]=pct_50;
);
Betreff: Zeilen in der Spaltenquantilberechnung ausschließenDurch einen Tippfehler ist mir gerade aufgefallen, dass Eval (substitute()) reicht, auch wenn man 1 durch 1 ersetzt:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
plot_param = {height, weight};
test_list = {};
For( plotcnt = 1, plotcnt <= N Items( plot_param ), plotcnt++,
pct_50 = Eval( Substitute( Expr( Col Quantile( If( Excluded( Row State( Row() ) ), ., Column( plot_param[plotcnt] ) ), 0.5 ) ), 1, 1 ) );
test_list[plotcnt] = pct_50;
);
show(test_list);

Betreff: Zeilen in der Spaltenquantilberechnung ausschließen@LatentDataTiger , Feedback vom JMP-Support (TS-00139301)
Ja, das ist ein Fehler. Die Entwickler haben bestätigt, dass es sich um ein Caching-Problem handelt, das speziell mit Col Quantile [& Col Median] zusammenhängt. Bei den anderen Col-Funktionen tritt das Problem nicht auf. Die Verwendung von Substitute erzeugt bei jeder Iteration der Schleife einen neuen Ausdruck, sodass das Caching nicht zweckentfremdet wird. Vielen Dank für die Meldung, ich werde einen Fehlerbericht einreichen.
Unter der Zeile ist es also nicht Substitute , sondern der Schutz durch Eval(Expr()), der den Fehler behebt.
schönes Beispiel von @Arn_Cota [angepasste Version], das den Effekt veranschaulicht:
Mehr anzeigen...Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
plot_param = {height, weight};
test_list = {};
For( plotcnt = 1, plotcnt <= N Items( plot_param ), plotcnt++,
// Without Exclude, returns correct values
pct_50_v0 = Col Quantile( Column( plot_param[plotcnt] ), 0.5 );
// With Exclude, returns the Quantile for height
pct_50_v1 = Col Quantile(
If( Excluded( Row State( Row() ) ),
.,
Column( plot_param[plotcnt] )
),
0.5
);
// With Eval and Substitute, returns correct values
pct_50_v2 = Eval(
Substitute(
Expr(
Col Quantile(
If( Excluded( Row State( Row() ) ),
.,
Column( plot_param[plotcnt] )
),
0.5
)
),
1, 1
)
);
// use Eval(Expr() to protect the expression against inappropriate caching
pct_50_v3 = Eval(Expr(Col Quantile(
If( Excluded( Row State( Row() ) ),
.,
Column( plot_param[plotcnt] )
),
0.5
)));
// Show different versions
Show(
plotcnt,
Column( plot_param[plotcnt] ),
pct_50_v0,
pct_50_v1,
pct_50_v2,
pct_50_v3
);
test_list[plotcnt] = pct_50_v3;
); Betreff: Zeilen in der Spaltenquantilberechnung ausschließenBeispiel/Workaround zur Ausdrucksbehandlung in JMP hinzugefügt: Tipps und Falltüren