Script JMP : Sélecteur de colonne appliqué sur un coefficientBonjour à tous,
J'essaie de faire un sélecteur de colonne sur différents calculs effectués par ce script :
//Calcul du Zsigma
z_yyy = Eval( {<STRONG>:"Y1"n</STRONG>} );
z_xx = z_yyy[1] << get values;
z_nnn = Eval( {:Nombre de seringues} );
z_nn = z_nnn[1] << get values;
z_rrr = Eval( {:Numéro de lot} );
z_Proportion = E Div( z_xx, z_nn );
z_Pbar = V Sum( z_xx ) / V Sum( z_nn );
z_sigma_est = Root( z_Pbar * (1 - z_Pbar) );
z_zvalue = E Mult( ((z_Proportion - z_Pbar) / z_sigma_est), Root( z_nn ) );
z_nr = N Row( z_zvalue );
z_mRList = {0};
z_m = z_zvalue;
z_m[1, 0] = [];
z_m = z_m |/ [0];
z_mr = Abs( z_m - z_zvalue );
z_nr = N Row( z_mr );
z_mr[z_nr, 0] = [];
z_SigmaZ = Mean( z_mr ) / 1.128;
z_KSigmaZ = 3 * z_SigmaZ;
//Et puis, voici le sélecteur de colonne :
Column = z_yyy << Column Switcher( :"Y1"n,{:"Y1"n, :"Y2"n, :"Y3"n, :"Y4"n ,"Y5"n ,"Y6"n});Cependant, j'obtiens un message d'erreur car le sélecteur de colonne n'est pas appliqué sur un objet...
Avez-vous une suggestion pour m'aider?
Sébastien
ScriptRe : JMP Script : Sélecteur de colonne appliqué sur un coefficientSuper! Ça marche vraiment bien !
Merci beaucoup pour votre aide 
Sébastien
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientJe crois que ce que vous devez vraiment utiliser est
z_yyy = Eval(column(currCol)<<GET name=""></GET>
ait renverra les valeurs de la colonne sélectionnée
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientVous pouvez essayer ceci et voir si cela fonctionne pour vous.Cela semblait bien fonctionner pour moi. J'ai reçu quelques avertissements dans le journal à propos de l'affectation z_xx, mais elle a en fait été très bien affectée. Dans mon exemple ci-dessous, j'ai créé une nouvelle colonne où Y3 = Y2.
Avertissement de journal :
Send attend un objet inscriptible lors de l'accès ou de l'évaluation de 'Send' , z_yyy << /*###*/get values/*###*/
à la ligne 16
names default to here(1);
dt = current data table();
colList = {"Y1", "Y2", "Y3"};
new window("Calculations",
hlb = hlistbox(
clb = col list box(dt, max selected(1),
on change(
try(calcVlb << delete());
currCol = clb << get selected();
//currColName = char(currCol[1]);
z_yyy = Eval(column(currCol));// Eval( {currCol} );
z_xx = z_yyy << get values;
z_nnn = Eval( {:Nombre de seringues} ); //change back
z_nn = z_nnn[1] << get values;
z_rrr = Eval( {:Numéro de lot} ); //change back
z_Proportion = E Div( z_xx, z_nn );
z_Pbar = V Sum( z_xx ) / V Sum( z_nn );
z_sigma_est = Root( z_Pbar * (1 - z_Pbar) );
z_zvalue = E Mult( ((z_Proportion - z_Pbar) / z_sigma_est), Root( z_nn ) );
z_nr = N Row( z_zvalue );
z_mRList = {0};
z_m = z_zvalue;
z_m[1, 0] = [];
z_m = z_m |/ [0];
z_mr = Abs( z_m - z_zvalue );
z_nr = N Row( z_mr );
z_mr[z_nr, 0] = [];
z_SigmaZ = Mean( z_mr ) / 1.128;
z_KSigmaZ = 3 * z_SigmaZ;
show(currCol[1]);
show(z_KSigmaZ);
hlb << append(
calcVlb = vlistbox(
textbox("Variables updated to column " || currCol[1]);
)
);
/*calcVlb << append(
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( column(currCol[1])),
Horizontal Layout( 1 ),
Vertical( 0 ),
PpK Capability Labeling( 0 ),
Customize Summary Statistics(
Std Err Mean( 0 ),
Upper Mean Confidence Interval( 0 ),
Lower Mean Confidence Interval( 0 ),
N Missing( 1 ),
Range( 1 )
)
)
);
);*/
Graph_exprall=Expr(
calcVlb << append(
Graphall = Control Chart(
Sample Label( :Nombre de seringues ),
Sample Size( :Numéro de lot ),
KSigma(TBD),
Sort by Row Order( 1 ),
Chart Col( column(currCol[1]), P( Test Beyond Limits( 1 ), Limits Precision( 1 ), LCL( -3 ) ) ),
SendToReport(
Dispatch(
{},
String_TBD,
OutlineBox,
{Set Title( "p'-chart, Proportion de défaut" )}
),
Dispatch(
{String_TBD},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 5 ), Min( -0.00025 ), Max( 0.0025 ),
Inc( 0.00025 ), Minor Ticks( 1 )}
),
Dispatch(
{String_TBD},
"1",
ScaleBox,
{Min( 0.5 ), Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{String_TBD},
"",
AxisBox,
{Add Axis Label( "Taux de défauts (srg)" )}
)));
//ColumnSwitcherObject = graphall << Column Switcher( :"Y1"n,{:"Y2"n, :"Y3"n, :"Y4"n, :"Y5"n ,"Y6"n ,"Y7"n});
);
);
// On affecte le SigmaZ à la carte de controle
olbString = "P of " || currCol[1];
SubstituteInto(Graph_exprall, Expr(TBD), z_KSigmaZ);
SubstituteInto(Graph_exprall, Expr(String_TBD), olbString);
Graph_exprall;
)
)
)
);
clb << append(colList);
clb << set selected(1);
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientJ'ai essayé avec cette expression :
KSigma(à déterminer),
mais le KSigma n'est pas mis à jour sur le graphique avec le colList sélectionné.
Cependant, le graphique est mis à jour avec la colonne (sélecteur) sélectionnée.
Une idée pour m'aider ?
Vous trouverez ci-joint un exemple de jeu de données.
Re : Script JMP : Sélecteur de colonne appliqué sur un coefficientJe ne suis pas sûr parce que je n'ai pas d'ensemble de données configuré pour le déboguer, mais j'ai changé votre code dans l'expression et supprimé le TBD et l'ai remplacé par la variable elle-même. Vous pouvez essayer de le remettre à TBD.
KSigma(z_KSigmaZ),
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientSalut,
Merci pour votre réponse, cela m'aide beaucoup.
Et je pense que j'y suis presque.
Il n'y a qu'une chose qui ne marche pas, le z_KSigmaZ n'est pas mis à jour sur le graphe réalisé...
Voici mon code :
colList = {"Y1", "Y2", "Y3"};
new window("Calculations",
hlb = hlistbox(
clb = col list box(dt, max selected(1),
on change(
try(calcVlb << delete());
currCol = clb << get selected();
currColName = char(currCol[1]);
z_yyy = Eval(column(currCol));// Eval( {currCol} );
z_xx = z_yyy << get values;
z_nnn = Eval( {:Nombre de seringues} ); //change back
z_nn = z_nnn[1] << get values;
z_rrr = Eval( {:Numéro de lot} ); //change back
z_Proportion = E Div( z_xx, z_nn );
z_Pbar = V Sum( z_xx ) / V Sum( z_nn );
z_sigma_est = Root( z_Pbar * (1 - z_Pbar) );
z_zvalue = E Mult( ((z_Proportion - z_Pbar) / z_sigma_est), Root( z_nn ) );
z_nr = N Row( z_zvalue );
z_mRList = {0};
z_m = z_zvalue;
z_m[1, 0] = [];
z_m = z_m |/ [0];
z_mr = Abs( z_m - z_zvalue );
z_nr = N Row( z_mr );
z_mr[z_nr, 0] = [];
z_SigmaZ = Mean( z_mr ) / 1.128;
z_KSigmaZ = 3 * z_SigmaZ;
show(currCol[1]);
show(z_Proportion);
hlb << append(
calcVlb = vlistbox(
textbox("Variables updated to column " || currCol[1]);
)
);
/*calcVlb << append(
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( column(currCol[1])),
Horizontal Layout( 1 ),
Vertical( 0 ),
PpK Capability Labeling( 0 ),
Customize Summary Statistics(
Std Err Mean( 0 ),
Upper Mean Confidence Interval( 0 ),
Lower Mean Confidence Interval( 0 ),
N Missing( 1 ),
Range( 1 )
)
)
);
);*/
Graph_exprall=Expr(
hlb << append(
Graphall = Control Chart(
Sample Label( :Numéro de lot ),
Sample Size( :Nombre de seringues ),
KSigma(z_KSigmaZ),
Sort by Row Order( 1 ),
Chart Col( column(currCol[1]), P( Test Beyond Limits( 1 ), Limits Precision( 1 )) ),
SendToReport(
Dispatch(
{},
"P of Y1",
OutlineBox,
{Set Title( "p'-chart, Proportion de défaut" )}
),
Dispatch(
{"P of Y1"},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 5 ), Inc( 0.00025 ), Minor Ticks( 1 )}
),
Dispatch(
{"P of Y1"},
"1",
ScaleBox,
{Min( 0.5 ), Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{"P of Y1"},
"",
AxisBox,
{Add Axis Label( "Taux de défauts (srg)" )}
)));
ColumnSwitcherObject = graphall << Column Switcher( :"Y1"n,{:"Y1"n, :"Y2"n, :"Y3"n});
);
);
)
)
)
);
clb << append(colList);
clb << set selected(1);
SubstituteInto(Graph_exprall, Expr(TBD), z_KSigmaZ);
Graph_exprall;Le z_KSigmaZ est bien calculé, cependant, il n'est pas appliqué sur le graphe réalisé...
Je pense que ça vient du SubstituteInto(Graph_exprall, Expr(TBD), z_KSigmaZ);
Pouvez-vous m'aider?
Merci beaucoup.
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientDésolé, cela peut ne pas être très utile. J'ai eu des erreurs dans le code de la carte de contrôle car le jeu de données n'est pas vraiment adapté à une carte de contrôle et je n'ai pas eu le temps de déboguer avec un jeu de données approprié. Mais vous pourrez peut-être l'utiliser et déboguer le code de la carte de contrôle.Je viens de le tester avec la plate-forme de distribution au lieu de la carte de contrôle et cela a bien fonctionné.Gardez à l'esprit que la zone de liste col avec le code "on change()" remplace le sélecteur de colonne, vous n'avez donc pas besoin de l'ajouter au code de la carte de contrôle. Il est simplement supprimé et réexécuté chaque fois que vous sélectionnez un nouveau paramètre (colonne) dans la zone de liste col.
Je n'avais pas réalisé que vous vouliez aussi des intrigues. Dans ce cas, un sélecteur de colonne aurait peut-être été plus approprié à utiliser. Il existe des moyens d'intercepter que la sélection a changé et vous pouvez exécuter du code pour mettre à jour vos variables et re-tracer. Mais cette approche col list box() devrait également fonctionner correctement.
names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
// New columns, update big class for y1, y2, y3
Local( {dt},
dt = Data Table( "Big Class" );
dt << New Column( "Y1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected
) << New Column( "Y2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected
) << New Column( "Y3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected
) << Begin Data Update;
For Each Row(
dt,
:Y1 = Random Integer( 1, 40 );
:Y2 = Random Integer( 1, 40 );
:Y3 = Random Integer( 1, 40 );
);
dt << End Data Update;
);
colList = {"Y1", "Y2", "Y3"};
new window("Calculations",
hlb = hlistbox(
clb = col list box(dt, max selected(1),
on change(
try(calcVlb << delete());
currCol = clb << get selected();
currColName = char(currCol[1]);
z_yyy = Eval(column(currCol));// Eval( {currCol} );
z_xx = z_yyy << get values;
z_nnn = Eval( {:weight} ); //change back
z_nn = z_nnn[1] << get values;
z_rrr = Eval( {:age} ); //change back
z_Proportion = E Div( z_xx, z_nn );
z_Pbar = V Sum( z_xx ) / V Sum( z_nn );
z_sigma_est = Root( z_Pbar * (1 - z_Pbar) );
z_zvalue = E Mult( ((z_Proportion - z_Pbar) / z_sigma_est), Root( z_nn ) );
z_nr = N Row( z_zvalue );
z_mRList = {0};
z_m = z_zvalue;
z_m[1, 0] = [];
z_m = z_m |/ [0];
z_mr = Abs( z_m - z_zvalue );
z_nr = N Row( z_mr );
z_mr[z_nr, 0] = [];
z_SigmaZ = Mean( z_mr ) / 1.128;
z_KSigmaZ = 3 * z_SigmaZ;
show(currCol[1]);
show(z_Proportion);
hlb << append(
calcVlb = vlistbox(
textbox("Variables updated to column " || currCol[1]);
)
);
calcVlb << append(
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( column(currCol[1])),
Horizontal Layout( 1 ),
Vertical( 0 ),
PpK Capability Labeling( 0 ),
Customize Summary Statistics(
Std Err Mean( 0 ),
Upper Mean Confidence Interval( 0 ),
Lower Mean Confidence Interval( 0 ),
N Missing( 1 ),
Range( 1 )
)
)
);
);
//Graph_exprall=Expr(
/*
hlb << append(
Graphall = Control Chart(
Sample Label( :weight ),
Sample Size( :age ),
KSigma(z_KSigmaZ),
Sort by Row Order( 1 ),
Chart Col( column(currCol[1]), P( Test Beyond Limits( 1 ), Limits Precision( 1 ), LCL( -3 ) ) ),
SendToReport(
Dispatch(
{},
"P of Y1",
OutlineBox,
{Set Title( "p'-chart, Proportion de défaut" )}
),
Dispatch(
{"P of Y1"},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 5 ), Min( -0.00025 ), Max( 0.0025 ),
Inc( 0.00025 ), Minor Ticks( 1 )}
),
Dispatch(
{"P of Y1"},
"1",
ScaleBox,
{Min( 0.5 ), Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{"P of Y1"},
"",
AxisBox,
{Add Axis Label( "Taux de défauts (srg)" )}
)));
//ColumnSwitcherObject = graphall << Column Switcher( :"Y1"n,{:"Y2"n, :"Y3"n, :"Y4"n, :"Y5"n ,"Y6"n ,"Y7"n});
// );
// On affecte le SigmaZ à la carte de controle
// SubstituteInto(Graph_exprall, Expr(TBD), z_KSigmaZ);
// Graph_exprall;
);
*/
)
)
)
);
clb << append(colList);
clb << set selected(1);
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientSuper! Cela fonctionne sur mon script!
Mais ensuite, j'ai un nouveau problème 
Le graphique que j'ai fait n'est pas mis à jour avec le coefficient calculé...
Voici à nouveau mon exemple :
colList = {"Y1", "Y2", "Y3"};
new window("Calculations",
hlb = hlistbox(
clb = col list box(dt, max selected(1),
on change(
try(calcVlb << delete());
currCol = clb << get selected();
currColName = char(currCol[1]);
z_yyy = Eval(column(currCol));// Eval( {currCol} );
z_xx = z_yyy << get values;
z_nnn = Eval( {:Nombre de seringues} );
z_nn = z_nnn[1] << get values;
z_rrr = Eval( {:Numéro de lot} );
z_Proportion = E Div( z_xx, z_nn );
z_Pbar = V Sum( z_xx ) / V Sum( z_nn );
z_sigma_est = Root( z_Pbar * (1 - z_Pbar) );
z_zvalue = E Mult( ((z_Proportion - z_Pbar) / z_sigma_est), Root( z_nn ) );
z_nr = N Row( z_zvalue );
z_mRList = {0};
z_m = z_zvalue;
z_m[1, 0] = [];
z_m = z_m |/ [0];
z_mr = Abs( z_m - z_zvalue );
z_nr = N Row( z_mr );
z_mr[z_nr, 0] = [];
z_SigmaZ = Mean( z_mr ) / 1.128;
z_KSigmaZ = 3 * z_SigmaZ;
show(currCol[1]);
show(z_Proportion);
show(z_KSigmaZ);
hlb << append(
calcVlb = vlistbox(
textbox("Variables updated to column " || currCol[1]);
)
)
)
)
)
);
// Creation des cartes
clb << append(colList);
clb << set selected(1);Le z_KSigmaZ est mis à jour comme je le voulais pour chaque variable.
Mais ensuite, je voudrais créer ce graphique:
Graph_exprall=Expr(
Graphall = Control Chart(
Sample Label( :Numéro de lot ),
Sample Size( :Nombre de seringues ),
KSigma(TBD),
Sort by Row Order( 1 ),
Chart Col( :"Y1"n, P( Test Beyond Limits( 1 ), Limits Precision( 1 ), LCL( -3 ) ) ),
SendToReport(
Dispatch(
{},
"P of Y1",
OutlineBox,
{Set Title( "p'-chart, Proportion de défaut" )}
),
Dispatch(
{"P of Y1"},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 5 ), Min( -0.00025 ), Max( 0.0025 ),
Inc( 0.00025 ), Minor Ticks( 1 )}
),
Dispatch(
{"P of Y1"},
"1",
ScaleBox,
{Min( 0.5 ), Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{"P of Y1"},
"",
AxisBox,
{Add Axis Label( "Taux de défauts (srg)" )}
)));
ColumnSwitcherObject = graphall << Column Switcher( :"Y1"n,{:"Y2"n, :"Y3"n, :"Y4"n, :"Y5"n ,"Y6"n ,"Y7"n});
);
// On affecte le SigmaZ à la carte de controle
SubstituteInto(Graph_exprall, Expr(TBD), z_KSigmaZ);
Graph_exprall;Existe-t-il un moyen de mettre à jour le graphique avec le nouveau coefficient z_KSigmaZ calculé ?
Je pense qu'il serait préférable de configurer le coefficient z_KSigmaZ et la sélection de variables dans la fenêtre de la carte de contrôle.
Pouvez-vous m'aider?
Merci beaucoup.
Re : Script JMP : Sélecteur de colonne appliqué sur un coefficientSalut Sébastien,
Il semble que vous souhaitiez que JMP mette à jour ces calculs (variables) lorsque vous cliquez sur une liste de colonnes. Est-ce exact? Si tel est le cas, le code ci-dessous utilise une zone de liste déroulante pour y parvenir.Le premier bit consiste simplement à configurer un exemple de table pour avoir les colonnes Y1, Y2 et Y3.Construisez ensuite une nouvelle fenêtre avec une zone de liste col et remplissez-la avec la liste des colonnes. Faites en sorte qu'il ait un nombre maximum de colonnes sélectionnables == 1. Lorsque la sélection change, elle sera recalculée.Il y a une list box() appelée calcVlb à laquelle vous pouvez ajouter des graphiques. Lorsque vous passez à la sélection suivante, l'ancienne sera supprimée avant de la remplacer par la nouvelle. À l'heure actuelle, il ajoute uniquement une zone de texte à titre d'exemple.
names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
// New columns, update big class for y1, y2, y3
Local( {dt},
dt = Data Table( "Big Class" );
dt << New Column( "Y1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected
) << New Column( "Y2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected
) << New Column( "Y3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected
) << Begin Data Update;
For Each Row(
dt,
:Y1 = Random Integer( 1, 40 );
:Y2 = Random Integer( 1, 40 );
:Y3 = Random Integer( 1, 40 );
);
dt << End Data Update;
);
colList = {"Y1", "Y2", "Y3"};
new window("Calculations",
hlb = hlistbox(
clb = col list box(dt, max selected(1),
on change(
try(calcVlb << delete());
currCol = clb << get selected();
currColName = char(currCol[1]);
z_yyy = Eval(column(currCol));// Eval( {currCol} );
z_xx = z_yyy << get values;
z_nnn = Eval( {:weight} ); //change back
z_nn = z_nnn[1] << get values;
z_rrr = Eval( {:age} ); //change back
z_Proportion = E Div( z_xx, z_nn );
z_Pbar = V Sum( z_xx ) / V Sum( z_nn );
z_sigma_est = Root( z_Pbar * (1 - z_Pbar) );
z_zvalue = E Mult( ((z_Proportion - z_Pbar) / z_sigma_est), Root( z_nn ) );
z_nr = N Row( z_zvalue );
z_mRList = {0};
z_m = z_zvalue;
z_m[1, 0] = [];
z_m = z_m |/ [0];
z_mr = Abs( z_m - z_zvalue );
z_nr = N Row( z_mr );
z_mr[z_nr, 0] = [];
z_SigmaZ = Mean( z_mr ) / 1.128;
z_KSigmaZ = 3 * z_SigmaZ;
show(currCol[1]);
show(z_Proportion);
hlb << append(
calcVlb = vlistbox(
textbox("Variables updated to column " || currCol[1]);
)
)
)
)
)
);
clb << append(colList);
clb << set selected(1);
Re : JMP Script : Sélecteur de colonne appliqué sur un coefficientLa fonctionnalité Column Switcher fait partie d'une plate-forme JMP telle que Graph Builder ou Bivariate. Ce n'est pas une caractéristique d'une matrice. Il ne crée pas de colonne de données dans une table de données.
Vous devez créer une table de données avec la matrice, lancer une plate-forme en attribuant des colonnes de données aux rôles d'analyse, puis activer la fonction de changement de colonne.