Erstellen Sie iterativ Spalten mit Formeln.Ich möchte die Spalten mit Spezifikationsgrenzen durchlaufen und für diese Analysen durchführen.
New Column("WM Minus Target", Numeric, "Continuous", Format("Best", 10), Formula(:WN - (:WN << get property("Spec Limits"))["Target"]), Set Selected);Das hier befindliche Skript kommt dem, was ich will, sehr nahe.
Gelöst: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte? - JMP-Benutzergemeinschaft
Ich frage mich nur, wie ich an die kompliziertere Formel komme?
Danke
SpannerHead
Automatisierung und SkriptingBetreff: Iterativ Spalten mit Formeln erstellen.Hier ist eine Möglichkeit. Mit einem assoziativen Array wäre es vielleicht eleganter als mit zwei Listen, aber die Verwendung von zwei Listen ist für mich einfacher zu verstehen:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
lstCols = {};
lstTargets = {};
//get cols with targets
For Each( {i}, 1 :: N Col( dt ),
t = .;
Try( t = (Column( i ) << Get Property( "Spec Limits" ))["Target"], );
If( !Is Missing( t ),
Insert Into( lstCols, i );
Insert Into( lstTargets, t);
);
);
//make formulas
For Each( {i, j}, lstCols,
//i = 5; j = 1;
dt << New Column( char(Column Name( i )) || " Minus Target",
Numeric,
"Continuous",
Format( "Best", 10 ),
Formula( as column(Column( i )) - lstTargets[j] )
)
);
/*JMP STATISTICAL DISCOVERY LLC (“JMP”) PERMITS THE USE OF THIS COMPUTER SOFTWARE CODE (“CODE”) ON AN AS-IS BASIS AND AUTHORIZES YOU TO USE THE CODE SUBJECT TO THE TERMS LISTED HEREIN. BY USING THE CODE, YOU AGREE TO THESE TERMS. YOUR USE OF THE CODE IS AT YOUR OWN RISK. JMP MAKES NO REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRIGEMENT, AND TITLE, WITH RESPECT TO THE CODE.
You may use the Code solely as part of a software product you currently have licensed from JMP, JMP’s parent company SAS Institute Inc. (“SAS”), or one of JMP’s or SAS’s subsidiaries or authorized agents (the “Software”), and not for any other purpose. The Code is designed to add functionality to the Software but has not necessarily been tested. Accordingly, JMP makes no representation or warranty that the Code will operate error-free. JMP is under no obligation to maintain, support, or continue to distribute the Code.
Neither JMP nor its licensors shall be liable to you or any third-party for any general, special, direct, indirect, consequential, incidental, or other damages whatsoever arising out of or related to your use or inability to use the Code, even if JMP has been advised of the possibility of such damages. Except as otherwise provided above, the Code is governed by the same agreement that governs the Software. If you do not have an existing agreement with JMP or SAS governing the Software, you may not use the Code.
JMP and all other JMP Statistical Discovery LLC product or service names are registered trademarks or trademarks of JMP Statistical Discovery LLC in the USA and other countries. ® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their respective companies.
*/
Betreff: Iterativ Spalten mit Formeln erstellen.Und hier ist ein anderer Weg
Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
colNames = dt << get column names( continuous, string );
For each( {col}, colNames,
Eval(
Eval Expr(
theTarget = (Column( Eval( col ) ) << get property( "Spec Limits" ))["Target"];
New Column( Expr( col ) || " Minus Target",
Numeric,
"Continuous",
Format( "Best", 10 ),
Formula( As Column( Eval( col ) ) - Expr( theTarget ) )
);
)
);
);Betreff: Iterativ Spalten mit Formeln erstellen.Der Code funktioniert, aber wenn ich mir die Formel in der resultierenden Spalte ansehe, sieht sie so aus.
As Column( Column( i ) ) - lstTargets[j]
Betreff: Iterativ Spalten mit Formeln erstellen.Sieht interessant aus, gibt mir aber einen Fehler. Name nicht aufgelöst: theTarget beim Zugriff oder bei der Auswertung von „theTarget“, theTarget/*###*/
Betreff: Iterativ Spalten mit Formeln erstellen.Wenn Eval(Evalexpr()) nicht verwendet wird, ist die vollständige Erweiterung des Formelcodes vor der Ausführung nicht möglich. Probieren Sie meinen geänderten Code unten aus
Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
colNames = dt << get column names( continuous, string );
For Each( {xcol}, colNames,
col = xcol;
theTarget = (Column( Eval( col ) ) << get property( "Spec Limits" ))["Target"];
Eval(
Eval Expr(
New Column( col || " Minus Target",
Numeric,
"Continuous",
Format( "Best", 10 ),
Formula( As Column( Eval( col ) ) - Expr( theTarget ) )
)
)
);
);Betreff: Iterativ Spalten mit Formeln erstellen.Jims Eval()-Lösung sollte ähnlich sein wie die Lösung, mit der die Formel auch in meinem Beispiel richtig angezeigt wird.
Betreff: Iterativ Spalten mit Formeln erstellen.Abhängig von Ihrer Analyse können Sie für jede Messung eine neue Spalte hinzufügen oder Ihre Tabelle zunächst stapeln und eine einzelne neue Spalte erstellen.
Hinzufügen neuer Spalten für jeden Parameter
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cont_cols = dt << Get Column Names("Continuous", "String");
cols_created = {};
For Each({cont_col}, cont_cols,
specs = Column(dt, cont_col) << Get Property("Spec Limits");
If(Is Empty(specs), // skip columns without specs
Continue();
);
cur_target = Try(specs["Target"], .); // If target isn't set -> use 0 (could for example use USL - LSL?)
new_col = Eval(Substitute( // generally I use Eval(EvalExpr()) but in this case this makes expression more clear
Expr(dt << New Column(cont_col || " Minus Target", Numeric, Continuos, Formula(
_curcol_ - _targetval_
))),
Expr(_curcol_), Name Expr(AsColumn(dt, cont_col)),
Expr(_targetval_), cur_target
));
// new_col << Suppress Eval(1);
Insert Into(cols_created, new_col << get name);
);
und Sie erhalten Spalten wie diese (das Ziel wird nicht aktualisiert, WENN Sie die Spalteneigenschaft ändern)

Stapeln
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cont_cols = dt << Get Column Names("Continuous", "String");
ml = dt << Manage Limits(Process Variables(Eval(cont_cols))); // in this case this will open very annoying "help" window due to inconsistencies
dt_limits = ml << Save to Tall Limits Table;
ml << close window;
dt_stack = dt << Stack(
columns(Eval(cont_cols)),
Source Label Column("Measurement"),
Stacked Data Column("Data"),
Output Table("Data Stacked")
);
// If you don't care about LSL/USL they could be dropped from update
dt_stack << Update(
With(dt_limits),
Match Columns(:Measurement = :Variable),
Replace Columns in Main Table(None)
);
dt_stack << New Column("Data Minus Target", Numeric, Continuous, Formula(
:Data - :Target
));
Beide Datenformate haben ihre Vor- und Nachteile, je nachdem, was Sie tun.
Bearbeiten:
Dadurch sollten die Werte aus der Spalteneigenschaft abgerufen werden, es erfolgt jedoch keine Neuauswertung (ich würde dies nicht wirklich verwenden, wenn Sie es vermeiden können).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cont_cols = dt << Get Column Names("Continuous", "String");
cols_created = {};
For Each({cont_col}, cont_cols,
specs = Column(dt, cont_col) << Get Property("Spec Limits");
If(Is Empty(specs), // skip columns without specs
Continue();
);
new_col = Eval(Substitute( // generally I use Eval(EvalExpr()) but in this case this makes expression more clear
Expr(dt << New Column(cont_col || " Minus Target", Numeric, Continuos, Formula(
_curcol_ - (_curcol_ << Get Property("Spec Limits"))["Target"]
))),
Expr(_curcol_), Name Expr(AsColumn(dt, cont_col))
));
//new_col << Suppress Eval(1);
Insert Into(cols_created, new_col << get name);
);