建立帶有列公式的表 - Random Normal() - 來自外部 jmp你好,
有人可以幫我提供一個 JSL 代碼嗎?該程式碼會在列屬性中產生一個帶有公式的新表?
公式的表大小、列名和參數來自附件中的外部 jmp 檔案。
有人可以分享一些程式碼片段嗎?如何開始?
大規模客製化回复:在列中創建一個帶有公式的表 - Random Normal() - 來自外部 jmp刪除第 1 列在腳本中很容易,因此應該不是問題。 我會創建具有特定名稱的列或使用索引將其刪除
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");如果您不需要公式,則使用“設置每個值”會更好,因為它更快。
為了學習... Eval(EvalExpr()) 絕對不是最容易理解的東西,但有些內容可能會有所幫助。 快速檢查我發現了這些:
回复:在列中創建一個帶有公式的表 - Random Normal() - 來自外部 jmp實際腳本生成一個未定義的列“Clolumn 1”。
並且在 New Table () 中生成列不會創建此類列。 這只是整容...
同時,我有一個具有單列定義的腳本,其他腳本被添加到新列之外。
並且新生成的表具有正確的計算值。 但是,如果我查看公式內部,則它包含腳本中的表達式。
我可以通過使用來掩蓋這個事實設置每個值()。 但這讓我發瘋...... 
現在我非常想知道為什麼表達式沒有被正確評估。 我沒有成功使用 Eval () Eval Expr() 和 Expr()。 我相信要了解它們的功能,但與 Formula 結合,沒有機會。
但是,我最初的問題已通過您的建議得到解決。 謝謝!
回复:在列中創建一個帶有公式的表 - Random Normal() - 來自外部 jmp您是否有特定原因想要在 New Table() 中創建列? 我不確定這是否可能,如果可能的話,與在 New Table() 之後創建它們相比,它很可能會使代碼更加混亂。
回复:在列中創建一個帶有公式的表 - Random Normal() - 來自外部 jmp謝謝! 它在下面使用此代碼。 而且對我幫助很大!!
但是,我現在有動力學習一點 JSL。 我考慮了一個可能的實施。 第二個代碼。
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"
我的概念來解決我的問題:
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 table不幸的是,我不知道如何在“新表”中使用“for 循環”和在公式中使用 evaluete 索引。
我假設一些如何使用 Eval,Eval Expr。
但我不明白語法。
你相信我的概念也可以使用正確的語法嗎?
需要修改什麼?
回复:在列中創建一個帶有公式的表 - Random Normal() - 來自外部 jmp您可以使用 For Each Row 遍歷 RandomNormal_dt.jmp,然後從列中獲取值。 使用Eval(EvalExpr()) 將值添加到公式。
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))))));
);

然後您可以根據需要添加行。添加行後,您可以根據需要刪除公式以使數據表更快。 如果您知道需要多少行,則可以將 Formula() 替換為 << Set Each Value() 並創建包含足夠行的集合。