JMP-Skript: Auf einen Koeffizienten angewendeter SpaltenumschalterHallo an alle,
Ich versuche, einen Spaltenumschalter für verschiedene Berechnungen zu erstellen, die von diesem Skript erstellt wurden:
//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;
//Und dann ist hier der Spaltenumschalter:
Column = z_yyy << Column Switcher( :"Y1"n,{:"Y1"n, :"Y2"n, :"Y3"n, :"Y4"n ,"Y5"n ,"Y6"n});Ich erhalte jedoch eine Fehlermeldung, weil der Spaltenumschalter nicht auf ein Objekt angewendet wird ...
Haben Sie einen Vorschlag, wie Sie mir helfen können?
Sebastian
SkripterstellungBetreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetGroßartig! Es funktioniert wirklich gut!
Vielen Dank für deine Hilfe 
Sebastian
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetIch glaube, was Sie wirklich brauchen, ist
z_yyy = Eval(column(currCol)<<GET name=""></GET>
ait gibt die Werte aus der ausgewählten Spalte zurück
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetSie können dies ausprobieren und sehen, ob es für Sie funktioniert.Bei mir schien es ok zu funktionieren. Ich habe einige Warnungen im Protokoll über die z_xx-Zuweisung erhalten, aber sie wurde tatsächlich problemlos zugewiesen. In meinem Beispiel unten habe ich eine neue Spalte erstellt, in der Y3 = Y2 ist.
Log-Warnung:
Send erwartet skriptfähiges Objekt beim Zugriff oder Auswertung von 'Send' , z_yyy << /*###*/get values/*###*/
in Zeile 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);
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetIch habe es mit diesem Ausdruck versucht:
KSigma(TBD),
aber das KSigma wird im Diagramm nicht aktualisiert, wenn die colList ausgewählt ist.
Das Diagramm wird jedoch mit der ausgewählten Spalte (Umschalter) aktualisiert.
Irgendeine Idee, mir zu helfen?
Anbei finden Sie ein Datensatzbeispiel.
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetIch bin mir nicht sicher, weil ich kein Dataset eingerichtet habe, um es zu debuggen, aber ich habe Ihren Code im Ausdruck geändert und die TBD entfernt und durch die Variable selbst ersetzt. Sie können versuchen, es wieder auf TBD zu ändern.
KSigma(z_KSigmaZ),
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetHallo,
Danke für deine Antwort, sie hilft mir sehr.
Und ich glaube, ich bin fast da.
Es gibt nur eine Sache, die nicht funktioniert, das z_KSigmaZ wird nicht auf dem erstellten Diagramm aktualisiert ...
Hier ist mein 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;Das z_KSigmaZ ist gut berechnet, wird jedoch nicht auf die erstellte Grafik angewendet ...
Ich denke es kommt von SubstituteInto(Graph_exprall, Expr(TBD), z_KSigmaZ);
Kannst du mir damit helfen?
Vielen Dank.
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetTut mir leid, das ist vielleicht nicht sehr hilfreich. Ich hatte Fehler im Regelkartencode, weil der Datensatz nicht wirklich für eine Regelkarte geeignet ist und ich keine Zeit hatte, mit einem richtigen Datensatz zu debuggen. Möglicherweise können Sie dies jedoch verwenden und den Regelkartencode debuggen.Ich habe es gerade mit der Distributionsplattform anstelle der Kontrollkarte getestet und es hat gut funktioniert.Denken Sie daran, dass das Listenfeld col mit dem Code „on change()“ den Platz des Spaltenumschalters einnimmt, sodass Sie diesen nicht zum Code des Regeldiagramms hinzufügen müssen. Es wird einfach jedes Mal gelöscht und erneut ausgeführt, wenn Sie einen neuen Parameter (Spalte) aus dem Listenfeld col auswählen.
Ich wusste nicht, dass du auch Plots wolltest. In diesem Fall wäre ein Spaltenumschalter möglicherweise besser geeignet gewesen. Es gibt Möglichkeiten, abzufangen, dass sich die Auswahl geändert hat, und Sie können Code ausführen, um Ihre Variablen zu aktualisieren und neu zu zeichnen. Aber dieser col list box()-Ansatz sollte auch gut funktionieren.
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);
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetGroßartig! Es funktioniert auf meinem Skript!
Aber dann habe ich ein neues Problem 
Das von mir erstellte Diagramm wird nicht mit dem berechneten Koeffizienten aktualisiert ...
Hier nochmal mein Beispiel:
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);Das z_KSigmaZ wird aktualisiert, wie ich es für jede Variable wollte.
Aber dann möchte ich diese Grafik erstellen:
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;Gibt es eine Möglichkeit, das Diagramm mit dem neu berechneten z_KSigmaZ-Koeffizienten zu aktualisieren?
Ich denke, es wäre besser, den z_KSigmaZ-Koeffizienten und die Variablenauswahl innerhalb des Regelkartenfensters einzurichten.
Kannst du mir damit helfen?
Vielen Dank.
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetHallo Sebastian,
Es hört sich so an, als ob Sie möchten, dass JMP diese Berechnungen (Variablen) aktualisiert, wenn Sie auf eine Liste von Spalten klicken. Ist das korrekt? Wenn dies der Fall ist, verwendet der folgende Code ein col-Listenfeld, um dies zu erreichen.Das erste Bit besteht lediglich darin, eine Beispieltabelle mit den Spalten Y1, Y2 und Y3 einzurichten.Erstellen Sie dann ein neues Fenster mit einem Spaltenlistenfeld und füllen Sie es mit der Liste der Spalten. Haben Sie es so, dass es eine maximale Anzahl von Spalten wählbar == 1 hat. Wenn sich die Auswahl ändert, wird sie neu berechnet.Es gibt eine Listbox() namens calcVlb, an die Sie Grafiken anhängen können. Wenn Sie zur nächsten Auswahl wechseln, wird die alte gelöscht, bevor sie durch die neue ersetzt wird. Im Moment hängt es nur ein Textfeld als Beispiel an.
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);
Betreff: JMP-Skript: Spaltenumschalter auf einen Koeffizienten angewendetDie Column Switcher-Funktion ist Teil einer JMP-Plattform wie Graph Builder oder Bivariate. Es ist kein Merkmal einer Matrix. Es erstellt keine Datenspalte in einer Datentabelle.
Sie müssen eine Datentabelle mit der Matrix erstellen, eine Plattform starten, indem Sie Datenspalten Analyserollen zuweisen, und dann die Spaltenwechselfunktion aktivieren.