JSL 幫助正確引用列大家好,
使用 JSL 將命令 <
我遇到困難的程式碼部分如下:
report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out( Eval( YCols ) ),
In( :Simulated Y )
);
運行該部分程式碼會出現以下錯誤:未找到要切換的列。然後彈出一個窗口,您應該在其中選擇要切換的列。
report_of_interest 是我發送模擬指令的報告視窗。 具體到 NumberColBox(8),它是報告中的「估計」欄位。 NBSnum 和 RSnum 是要運行的引導樣本數和隨機種子變數。 問題在於 Simulate( ) 指令的 Out( ) 中的列名。 In( ) 列沒有問題,因為我可以將模擬資料列命名為任何我想要的名稱,但 Out( ) 選項的列不是我真正想要重命名的列或其他列。 在本例中,我將模擬資料儲存到資料表中,並將該列重命名為“Simulated Y”,以便我可以根據 Simulate 命令中的需要將其引用為 In(:Simulated Y)。
在程式碼的前面,系統會提示使用者選擇將作為建模回應列的列,這就是 YCols,通常,在處理平台中的列時,您可以將其設為 Eval(YCols),並且它很好地接受它,例如:
fm = avdt << Fit Model(
Y( Eval( YCols ) ),
Validation( :Validation ),
Effects( :Null Factor, Eval( XCols ) ),
Personality( "Generalized Regression" ),
Run( Fit( Estimation Method( Forward Selection ), Validation Method( Validation Column ) ) )
);
將在 Y( ) 欄位上正確執行擬合模型。 然而,Simulate( ) 命令希望將該列引用為作用域列,我相信,正如它所希望的那樣,例如:My Column To Model。
假設該列的名稱為“My Column To Model”,因此變數 YCols 和 Eval(YCols) 都會傳回以下 {“My Column To Model”}。 將類比指令傳送到報表時,它需要範圍列名稱,如下所示:
report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out( :My Column To Model ),
In( :Simulated Y )
);
問題是,我正在建模的列可以更改,因此它的名稱會更改,我不想將列重命名為始終為固定名稱,例如 :YData。 我想使用像 YCols 這樣的變量,但我不知道如何使用中綴冒號運算子 (:) 和像 YCols 這樣的變數來為 Simulate( ) 命令提供正確的列參考。
我試過 As Column(dt, name), Column(dt, name), Column(number), Parse(":"||char(Column(avdt, Eval(YCols)))), Parse(":" | |Eval(YCols)[1]),但這些都不行。 它們都會導致上面提到的相同錯誤,並打開一個新視窗來選擇要交換輸入/輸出的列,這否定了我正在嘗試執行的自動化。
任何幫助深表感謝。
謝謝!,
DS
進階統計建模自動化和腳本編寫基礎資料分析與建模視窗回覆:JSL 幫助正確引用列我找到了一個可能的解決方案,但它肯定效率不高,而且相當麻煩。 我想有更好的解決方案,我希望有人可以幫助我。
我發現,如果您在 JSL 中建立發送命令的字串並使用 Eval(Parse()) 實際執行它,那麼它就可以工作。 同樣,它很麻煩而且效率不高,但它確實有效。
str = Eval Insert(
"report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out("
);
str2 = Eval Insert( " ),
In( :Simulated Y )
)" );
Eval( Parse( str || ":" || Char( Eval( YCols )[1] ) || str2 ) );奇怪的解決方案,我希望有人有更好的解決方案可以分享。
謝謝!,
DS
回覆:JSL 幫助正確引用列我也有這樣的問題。它可能不是最好的解決方案,但以下程式碼應該可以完成您想要的操作。*編輯*我看到你已經找到類似的方法了。=)
Eval(
Parse(
"\[report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out( ]\"
|| YCols[1] || "\[ ),
In( :Simulated Y )
);]\"
)
);
回覆:JSL 幫助正確引用列如果我必須建立列參考列表並且 Eval 不起作用,我通常會建立表達式,然後使用 Eval(Substitute())
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cols = {"height", "weight"};
obj = Fit Model(
Y(:weight),
Effects(:age, :sex, :height),
Personality("Generalized Regression"),
Generalized Distribution("Normal"),
Run(
Fit(
Estimation Method(Lasso(Adaptive)),
Validation Method(AICc)
)
)
);
obj << (fit[1] << Save Simulation Formula);
rpt = Report(obj);
out_expr = Expr(Out());
For Each({colname}, cols,
Insert Into(out_expr, Name Expr(AsColumn(dt, colname)));
);
show(out_expr);
Eval(Substitute(
Expr(dtlst = rpt["Parameter Estimates for Original Predictors"][Number Col Box("Prob > ChiSquare")] <<SIMULATE></SIMULATE>回覆:JSL 幫助正確引用列你好@mmarchandTSI和@jthi ,
感謝您提供有關如何解決此問題的回饋和想法。 對於使用 JMP/JSL 解決相同問題有多種不同的方法,我不應該感到太驚訝。 該軟體的偉大之處之一。 不過,我發現有趣的是,「更簡單」的解決方案是不可能的。 我很感激你的幫忙!
謝謝,
DS