将您的问题分解成更小的部分。 从一些非常简单的东西开始,比如(我的语法可能不适用于 JMP14,因为我使用的是 JMP17)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp");
yname = "namechange";
col_name = "Measurement";
var_chart = Variability Chart(
Y(Transform Column(yname, Formula(colname))),
X(:Operator, :part#)
);
您已经可以使用这种类型的脚本来解决问题,但是使用类似的脚本进行测试要容易得多。
使用这样的脚本,我很可能会求助于使用 Eval(EvalExpr()) 因为它允许我执行类似下面的操作(如果我只运行 EvalExpr() 部分,我可以看到将被评估的表达式)

如果您使用转换只是为了重命名 Y 轴列,则可能有比使用转换列更简单的选项。
在你让那部分工作之后,是时候开始处理过滤器或缩放了,但不要同时做这些。
谢谢回复。 我已经单独验证了代码的所有其他组件,所以我不担心额外的复杂性。
您发布的第一段代码在 JMP14 中不起作用。 报错信息为“By group的一列没有数据,因为所有行都有缺失值或被排除。
我确实找到了一个解决方案,方法是用 Eval(EvalExpr()) 封装可变性图表函数调用,然后在 Expr(Name Expr(AsColumn())) 中封装转换内部的列名称。
以下将适用于 JMP 14
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp"
);
yname = "namechange";
col_name = "Measurement";
Variability Chart(
Y( Transform Column( yname, Formula( as column(col_name)) ) ),
X( :Operator, :part# )
);
很简单,我正在尝试模块化一些变异性图表。 我想要绘制这些图表总共有 3-4 个不同的参数,因此我需要向函数传递一个键来告诉它要绘制哪一列,并让它设置该列的一些特定处理。 即,作为绘图操作的一部分,该列需要经历什么样的转换。
我开始的方法是传入一个字符串,然后使用一组条件来指定要转换的列的名称 (colname),然后指定要应用于转换的 striong (yname)。
我已经尝试了多种方法来做到这一点,无论我使用什么解决方案,我都无法使绘图正常工作。 对于给定的过滤器,对变异性图表的 Y 进行硬编码始终可以正确工作,因此我知道存在数据,但我似乎无法使用我的变量方法来选择它。 到目前为止,这是我对 var 图表 Y 线所做的尝试:
- Y( 转换列( yname, 公式( 列(列名) ) ) ),
- JMP 警报:无效参数(对话框)
- 组没有数据,因为所有行都有缺失值或被排除(日志窗口)
- Y( 变换列( yname, 公式( 列(dt,列名) ) ) ),
- JMP 警报:无效参数(对话框)
- 组没有数据,因为所有行都有缺失值或被排除(日志窗口)
- Y( 转换列( yname, 公式( 列( 作为列(列名)) ) ) ),
- JMP 警报:未解析的列 256 次(对话框)
- “无效参数 256 次,一列或一组没有数据,因为所有行都有缺失值或被排除(日志)
- Y( 转换列( yname, 公式( 列( As Column(dt,colname)) ) ) ),
- JMP 警报:范围数据表访问需要数据表列或变量 256 次(对话框)
- 无效参数 256 次,一列或一组没有数据,因为所有行都有缺失值或被排除(日志)
- Y( 转换列( yname, 公式( 作为列(列名) ) ) ),
- JMP 警报:未解析的列 267 次(对话框)
- (没有日志错误)
- Y( 转换列( yname, 公式( As Column(dt,colname) ) ) ),
- JMP 警报:范围数据表访问需要数据表列或变量 267 次(对话框)
- (没有日志错误)
如果我的尝试并不明显,我仍然不清楚 As Column() 和 Column() 之间的区别是什么。 我在论坛上看到过其中一个或两个的解决方案,所以我尝试了所有这些,但一无所获。 我看到的唯一线索是,当独立使用 As Column() 时,与由 Column() 包装的情况(256)相比,我得到了不同数量的访问冲突(267)。 我确实知道 267 是该过滤器返回的“正确”行数,因为对转换公式中的列名称进行硬编码可以正确绘制 267 行。
此外,我尝试将 colname 变量直接设置为列(colname = :R 和 colname = ":R")以及直接使用这些变量和/或将它们包装在 Column() 和 As Column() 的组合中的各种组合功能也没有成功。
有人能看到我在这里做错了什么吗?
注意:这个确切的代码未经测试,var 名称已经通用。
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>