Erstellen einer Tabelle mit Formel in den Spalten – Random Normal() – aus externem JMPHi,
Kann mir jemand mit einem JSL-Code helfen, der eine neue Tabelle mit einer Formel innerhalb der Spalteneigenschaften generiert?
Die Tabellengröße, Spaltennamen und Parameter für die Formel stammen aus einer externen JMP-Datei wie im Anhang.
Kann jemand einige Code-Ausschnitte teilen und erklären, wie man damit anfängt?
MassenanpassungBetreff: Erstellen einer Tabelle mit Formel in den Spalten - Random Normal() - aus externem jmpDas Entfernen der Spalte 1 ist im Skript einfach, daher sollte es kein Problem sein. Ich würde entweder eine Spalte mit einem bestimmten Namen erstellen oder sie mithilfe des Index entfernen
Names Default To Here(1);
dt = New Table("testtable", add rows(1),
new column("REMOVETHIS")
);
wait(1); //for demonstration purposes<BR />//dt << Delete Column(1);
dt << Delete Columns("REMOVETHIS");Die Verwendung von Set Each value ist besser, wenn Sie keine Formeln benötigen, da dies schneller ist.
Zum Lernen... Eval(EvalExpr()) sind definitiv nicht die einfachsten Dinge zu verstehen, aber es gibt einige Inhalte, die hilfreich sein könnten. Bei der schnellen Überprüfung habe ich diese gefunden:
Betreff: Erstellen einer Tabelle mit Formel in den Spalten - Random Normal() - aus externem jmpDas eigentliche Skript erzeugt eine undefinierte Spalte " Clolumn 1".
Und das Generieren von Spalten in New Table () erstellt keine solche Spalte. ist nur kosmetik...
In der Zwischenzeit habe ich ein Skript, das eine einzelne Spaltendefinition hat und die anderen außerhalb der neuen Spalte hinzugefügt werden.
Und die neu generierte Tabelle hat korrekt berechnete Werte. Wenn ich jedoch in die Formel schaue, enthält sie den Ausdruck aus dem Skript.
Ich kann diese Tatsache maskieren, indem ich verwende Legen Sie jeden Wert fest (). Aber es macht mich verrückt ... 
Und jetzt muss ich unbedingt verstehen, warum der Ausdruck nicht richtig ausgewertet wird. Ich hatte keinen Erfolg mit Eval () Eval Expr() und Expr(). Ich glaube, ihre Funktionen zu verstehen, aber in Kombination mit Formula, keine Chance.
Mein anfängliches Problem ist jedoch mit Ihrem Vorschlag gelöst. Danke!
Betreff: Erstellen einer Tabelle mit Formel in den Spalten - Random Normal() - aus externem jmpGibt es einen bestimmten Grund, warum Sie die Spalten in New Table() erstellen möchten? Ich bin mir nicht sicher, ob dies möglich ist, und wenn dies der Fall ist, wird der Code höchstwahrscheinlich unordentlicher, wenn er mit dem Erstellen nach New Table() verglichen wird.
Betreff: Erstellen einer Tabelle mit Formel in den Spalten - Random Normal() - aus externem jmpDanke! Mit diesem Code unten hat es funktioniert. Und es hilft mir sehr!!
Ich bin jedoch motiviert, jetzt ein bisschen JSL zu lernen. Und ich habe über eine mögliche Umsetzung nachgedacht. Zweiter Code.
Clear Globals();
Names Default To Here( 1 );
//mydt =
//Data Table( "dt_RandomNormalParameter" ) <<
mydt = Current Data Table();
// New data table
my_newdt = New Table( "Table Name", Add Row ( 1000 ));
//lets use formulas, we can easily add more rows if needed
For Each Row(
mydt,
columnName = As Column(mydt, "Analysis Columns");
meanValue = As Column(mydt, "Mean");
stdDevValue = As Column(mydt, "Std Dev");
//use eval expr to get values in formula
Eval(Eval Expr(my_newdt << New Column(columnName, Numeric, Continuous, Formula(Random Normal(Expr(meanValue), Expr(stdDevValue))))));
);
// Code adds Column "Column 1"
Mein Konzept zur Lösung meines Problems:
Clear Globals();
Names Default To Here( 1 );
mydt = Current Data Table();
// New data table
my_newdt = New Table( "Table Name",
Add Rows (N Rows ( mydt )), // row count can be set by hand e.g. 1000
//For ( i = 1, i <= N Rows ( mydt ), i++, // for loop is not executed
New Column( Column(mydt, 1 )[1] , // Loop i==1
Numeric,
"Continuous",
Format( "Best", 6 ),
Formula( Random Normal( Column(mydt, :Mean )[1], Column(mydt, :Std Dev )[1] ) )// Column(mydt, :Mean )[1] is not evalueted
),
New Column( Column(mydt, 1 )[2] , // Loop i ==2
Numeric,
"Continuous",
Format( "Best", 6 ),
Formula( Random Normal( Column(mydt, :Mean )[2], Column(mydt, :Std Dev )[2] ) )//// Column(mydt, :Mean )[1] is not evalueted
)
//)// for loop
)// New data tableLeider weiß ich nicht, wie man "for loop" in "New Table" verwendet und den Index in Formula auswertet.
Ich nehme an, wie mit Eval, Eval Expr.
Aber ich verstehe die Syntax nicht.
Glauben Sie, dass mein Konzept auch mit der richtigen Syntax funktionieren könnte?
Was muss geändert werden?
Betreff: Erstellen einer Tabelle mit Formel in den Spalten - Random Normal() - aus externem jmpSie können Ihre RandomNormal_dt.jmp mit For Each Row durchlaufen und dann Werte aus den Spalten abrufen. Verwenden Eval(EvalExpr()) zum Hinzufügen von Werten zur Formel.
Names Default To Here(1);
dt_random = New Table("RandomNormal_dt",
Add Rows(20),
New Column("Analysis Columns",
Character(6),
"Nominal",
Set Values(
{"Name1", "Name2", "Name3", "Name4", "Name5", "Name6", "Name7", "Name8", "Name9", "Name10", "Name11", "Name12", "Name13", "Name14","Name15", "Name16", "Name17", "Name18", "Name19", "Name20"}
),
),
New Column("Mean", Numeric, "Continuous", Format("Best", 6), Set Values([1, 1, 0, 0, 0, 2, 2, 3, 3, 5, 10, -5, -6, 3, 3, 3, 3, 3, 0.5, 0.5]), ),
New Column("Std Dev",
Numeric,
"Continuous",
Format("Best", 6),
Set Values(
[0.0059167075785471, 0.00455419279075633, 0.00421951193571742, 0.00421951193571742, 0.00440945078910684, 0.00440945078910684,
0.0102216984358101, 0.00419398115162298, 0.0808821732109718, 0.0876924473662647, 0.119338972830502, 0.0918654224334168,
0.0921864791037008, 0.0868549769597964, 0.0808821732109718, 0.0865262154672911, 0.186459394109712, 0.189566585675401, 0.0876924449303901,
0.0434724818197371]
),
)
);
//create collection table
dt = New Table("Analysis");
//lets use formulas, we can easily add more rows if needed
For Each Row(
dt_random,
columnName = As Column(dt_random, "Analysis Columns");
meanValue = As Column(dt_random, "Mean");
stdDevValue = As Column(dt_random, "Std Dev");
//use eval expr to get values in formula
Eval(Eval Expr(dt << New Column(columnName, Numeric, Continuous, Formula(Random Normal(Expr(meanValue), Expr(stdDevValue))))));
);

Dann können Sie nach Bedarf Zeilen hinzufügen. Nach dem Hinzufügen von Zeilen können Sie Formeln entfernen, um die Datentabelle bei Bedarf zu beschleunigen. Wenn Sie wissen, wie viele Zeilen Sie benötigen, können Sie Formula() durch << Set Each Value() ersetzen und die Sammlung mit genügend Zeilen erstellen.