Exclure des lignes dans le calcul du quantile de colSalut,
J'essayais d'obtenir Col Quantile( :height, 0.5, :class) mais il semble que le calcul tiendrait toujours compte des lignes exclues.
Existe-t-il un moyen de rejeter les lignes exclues dans le calcul du Col Quantile ?
Merci,
Midori
ScriptRe : Exclure des lignes dans le calcul du quantile de colVous pouvez vérifier si la ligne est exclue dans la fonction Col Quantile().Ci-dessous un exemple
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 ) )
);
Chaque fois que l'état de ligne exclu change pour les lignes de la table de données, la formule calcule de nouvelles valeurs
Re : Exclure des lignes dans le calcul du quantile de colJ'ai essayé de créer une boucle pour collecter le 50e centile de nombreux paramètres en utilisant le code suivant, mais les deux éléments de "test_list" sont identiques (ils représentent tous les deux 50 % du poids). Cependant, si j'exécute les lignes manuellement, cela fonctionnera. Puis-je ne pas utiliser la fonction Col Quantile() dans la boucle for ?
Noms par défaut ici ( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
plot_param={
hauteur,
poids};
liste_test={} ;
pour(plotcnt=1, plotcnt<=nitems(plot_param), plotcnt++,
pct_50=Col Quantile( If(exclu(rowstate(Row())),., column(plot_param[plotcnt])), 0.5);
test_list[lotcnt]=pct_50;
);
Re : Exclure des lignes dans le calcul du quantile de col
J'ai essayé de créer une boucle pour collecter le 50e centile de nombreux paramètres en utilisant le code suivant, mais les deux éléments de "test_list" sont identiques (ils représentent tous les deux 50 % du poids). Cependant, si j'exécute les lignes manuellement, cela fonctionnera. Puis-je ne pas utiliser la fonction Col Quantile() dans la boucle for ?
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;
); Re : Exclure des lignes dans le calcul du quantile de colNames 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;
);
Re : Exclure des lignes dans le calcul du quantile de colSuite à une faute de frappe, je viens de remarquer que Eval (substitute()) suffit, même si vous remplacez 1 par 1 :
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);

Ré: Exclure des lignes dans le calcul des quantiles de colonnes@LatentDataTiger , commentaires du support JMP (TS-00139301)
Oui, c'est un bug. Les développeurs ont vérifié qu'il s'agissait d'un problème de mise en cache avec Col Quantile [et Col Median] en particulier. Les autres fonctions Col ne présentent pas ce problème. L'utilisation de Substitute crée une nouvelle expression à chaque itération de la boucle afin que la mise en cache ne soit pas utilisée de manière incorrecte. Merci d'avoir signalé ce problème et je vais déposer un rapport de bogue.
Donc, sous la ligne, ce n'est pas Substitute , mais la protection via Eval(Expr()) qui corrige le bug.
bel exemple de @Arn_Cota [version adaptée] illustrant l'effet :
Voir plus...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;
); Ré: Exclure des lignes dans le calcul des quantiles de colonnesexemple/solution de contournement ajouté à la gestion des expressions dans JMP : Tipps et Trapdoors