生成對列表中的列求和的動態公式列所需的 JSL 代碼大家好,
這個問題與一個帖子有關這裡這很好地生成了一個非動態列來匯總其他列的列表。
我遇到的問題是,當您有一個包含 N 個其他列的列表並將其設為動態公式時,如何匯總這些列(使用 JSL)。
我的數據表中有一個列列表,比如 ColList,我想生成一個新列,其中包含一個簡單地對 ColList 中的 N 項求和的公式。 我在想的是這樣的:
Names Default to Here (1);
dt = Open("$Sample_Data/2D Gaussian Process Example.jmp");<BR />ColList = dt << Get Column Names;
dt << New Column("Sum", Formula(Sum(ColList)));這顯然行不通,因為 ColList 是一個列列表:ColList = {"col1", "col2", ..., "colN"}。 我試圖製作一個字符串並使用 Eval(Parse()) 和 Eval Insert() 像這樣:
Names Default to Here (1);
dt = Current Data Table();
str = Eval Insert("dt << New Column(\!"Sum\!", Formula(Sum(Eval(ColList))));");
Eval(Parse(str));但仍然沒有運氣。 JSL 代碼將生成帶有公式的列,但行值將為空,因為它仍然在公式中顯示 Eval(ColList) 而不是實際公式,它應該類似於:Sum(:col1, :col2, : col3, ..., :colN).
我無法弄清楚從列列表 {""} 到對帶有冒號的列的引用我做錯了什麼:。
任何幫助深表感謝。
謝謝!,
DS
消費者和市場研究質量與工藝工程回复:生成對列表中的列求和的動態公式列所需的 JSL 代碼你好@多發性硬化症,
非常感謝您的解決方案。 它適用於我正在使用的數據表。 我確實需要稍微修改一下,以說明我使用的許多數據表都有其他數據類型,所以我只需要考慮數值連續數據。 不管怎樣,它都能正常工作並正確填寫多元均值、標準偏差和 X 相關性。 如果重要的話,我正在使用 JMP 16 EA。
感謝您的幫助! 我還在原始請求的另一個線程中發布了有關相關矩陣的信息,這樣人們就有希望從代碼中受益以擴展到 N 維。
謝謝!,
DS
回复:生成對列表中的列求和的動態公式列所需的 JSL 代碼這是一種方法。 首先迭代構建 Factors(),然後在第二步中生成完整的 Simulator() 表達式,包括 X Correlations() 的評估參數。
// Iteratively build the Factors expression
fs = Expr( Factors() );
For( i = 1, i <= N Items( ColList ), i++,
Insert Into(
fs,
Eval Expr( Expr( collist[i] ) << multivariate( Expr( MMean[i] ), Expr( MSD[i] ) ) )
)
);
// Make the complete Simulator expression
sim = Eval Expr(
sim_design << Simulator(
1,
Expr( Name Expr( fs ) ),
X Correlations( 1, Expr( ColList ), Expr( corr_mat ) ),
N Runs( 1e4 )
)
);
// Name Expr( sim ) // Run this line to show the expression in the log
// Launch Profiler and run the Simulator expression
sim_design = Profiler( Y( :Pred ) );
sim;
然而,X 相關矩陣似乎(在大多數情況下)被忽略。 報告中只有零。
此外,當在分析器中手動輸入相關性並保存和運行腳本時,相關性將丟失。 即使它們保留在保存的腳本中。 不知道為什麼。
回复:生成對列表中的列求和的動態公式列所需的 JSL 代碼你好@多發性硬化症,
我有一個相關的問題(因此不是另一篇文章),我希望您的腳本方法可以幫助解決。 跟帖子有關係這裡. 我現在要做的基本上是將原始帖子中的內容從 4x4 相關矩陣概括為任意 NxN 矩陣,當“饋送”信息到配置文件中的模擬器時。
從另一個原始帖子中,有一個腳本可以生成 NxN 相關矩陣,並且可以根據您的輸入生成一個“預測”列(其他 N 列的總和)。 我遇到困難的地方如下:調用 Simulator() 函數時,您需要傳遞以下內容:
模擬器(state=0|1, , )
因此,從另一篇原始文章中,傳遞正確的因子列表(“tpListY”)和相關矩陣(“corr.mat”)的解決方案,JSL 代碼需要將 Eval Insert() 包裹在發送調用周圍Simulator() 到 Profiler 報告,然後圍繞它運行 Eval(Parse())。
現在的挑戰是如何正確概括這一點,以便在調用 Simulator() 和定義因子時,您可以在該 ColList 上執行此操作。
ColList 可能是這樣的:ColList = {A, B, C, D, ...} 並且每列 A, B, C, ... 都有相關的均值和標準差。
調用模擬器的正確語法是什麼,以便它為每個因子插入正確的均值和標準偏差? 例子:
sim_design = Profiler(Y(:Pred), Invisible);
new = Eval Insert(
"sim_design << Simulator(
1,
Factors(
:A << mutlivariate(Mmean[1], MSD[1])),
:B << mutlivariate(Mmean[2], MSD[2])),
:C << mutlivariate(Mmean[3], MSD[3])), //etc. for the N columns in the made up table.
),
X Correlations(
1,
Eval(ColList),
Eval(corr_mat)
),
NRuns(1e6)
);");
Eval(Parse(new));根據原始數據表,使用用於生成相關矩陣 (corr_mat) 的列數 (N) 製作第二個模型。 該模擬表是對列求和以構成 :Pred 列的表格,該列用作發送到 Profiler 的虛擬函數。 變量 Mmean 和 MSD 是包含 N 列 A 到 whatever 的平均值和標準偏差的向量。
無需明確寫入每一列及其相應的平均值,我希望它更加自動化,以便它可以處理任意數量的列。
解決這個問題的好方法是什麼?
我也遇到了 Eval(corr_mat) 實際上在 X Correlations 條目中輸入相關矩陣值的問題。
附加的數據表和腳本應該有助於理解我正在嘗試的內容。
謝謝!,
DS
更新,抱歉添加了錯誤的文件,現在有正確的數據表。
回复:生成對列表中的列求和的動態公式列所需的 JSL 代碼你好@多發性硬化症,
這是一個完美的解決方案,謝謝! 我喜歡它的簡單和優雅。
我確實不得不稍微更改我的代碼,因為當列表的結構如下時,按照您的方式進行操作仍然存在問題:{“A”、“B”、“C”、...}。 但是,如果列表的結構類似於 {A, B, C, ...} 那麼它就可以很好地評估表達式。 這兩個列表的生成方式略有不同,引號確實使 Eval() 失效。
謝謝!,
DS
回复:生成對列表中的列求和的動態公式列所需的 JSL 代碼做這件事有很多種方法。 我更喜歡使用 EvalExpr() 為所需的表達式創建一個變量,然後使用 NameExpr() 將(未評估的)表達式傳輸到 Formula() 參數中。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/2D Gaussian Process Example.jmp" );
ColList = dt << Get Column Names;
F = Eval Expr( Sum( Expr( ColList ) ) );
dt << New Column( "Sum", Formula( Name Expr( F ) ) );