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