应用程序脚本... 分组依据,变量我正在创建一个应用程序,允许用户在运行涉及一些 SQL 查询的脚本之前选择一些选项,然后制作一些图表......没什么太疯狂的。
单选按钮控件用于设置名为“type”的变量的值。我希望二元图的“适合位置”选项之一是该变量的内容......
Bivariate(
Y( :Current),
X( :Voltage),
Show Points( 0 ),
Fit Where(
:type == "cell",
Fit Each Value( {Report( 0 ), Line Color( {0, 0, 255} ), Report( 0 )} )
),
Fit Where(
:type == type, //this is troublesome line... the graph is generated but not quite right.
Fit Each Value( {Report( 0 ), Line Color( {213, 72, 87} ), Report( 0 )} )
),
By( :CellID)
);
该图生成正确,但令人烦恼的是生成的图显示“适合每个值类型==类型”。我怎样才能让它显示所使用的变量的内容而不是它的名称?我已经尝试了一些选项,包括“eval(type)”。

回复:应用程序脚本编写... 分组依据,变量非常感谢您的快速回复。我忘记将其复制到我的示例中,但我的脚本的开头以“名称默认为此处(1);”不要认为该命令在脚本中出现的位置很重要,只要它位于相关函数之前即可。
我首先尝试了吉姆的代码,它产生了与我原来的脚本相同的问题。值 13 没有显示在图表下方,而是显示“age==age”。注意:我正在运行 JMP 12

由于我使用的变量名称与表中的列不匹配,因此我认为我不会遇到 JMP 尝试分配 gzmorgan0 提到的列值的问题。
使用“group by”而不是“fit where”的方法达到了目的。由于我从通过“分组依据”菜单选项创建的双变量复制了此脚本,因此我并不困惑为什么它使用“适合位置”。但这是另一个问题。谢谢你的帮助。
回复:应用程序脚本编写... 分组依据,变量吉姆是对的。
如果没有默认名称 (1),则所有变量都是全局变量。 JMP 脚本编写指南指出
“当全局变量和列具有相同的名称时,......在这种情况下,您必须确定列名称的范围。”
事实上,当我运行脚本时,我收到错误
无法设置“年龄”列的值,因为行号 (-1) 无效。
由于它不是 ::age,因此 JMP 认为语句 Age=13 正在尝试将值分配给名为 Age 的列。Names Default To Here(1) 使变量“age”成为本地变量并解决了此冲突。 但是,我强烈建议您使用 Names Default to Here(1)和对用户输入使用不同的名称,例如 _age 或 usr_val。我相信名称冲突(冲突,又名范围界定)是继语法和拼写错误之后第二高发生的脚本错误。
下面的脚本是对 Jim 的稍作修改:
- _age被赋值
- FitWhere() 的替代方法。选择要使用的值,然后使用 Group By() 将为每个 Group By 值提供名称。
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
_age=13;
biv = dt << Bivariate(
Y( :weight),
X( :height),
Show Points( 0 ),
where(:age==12 | :age==_age),
Group By(:age),
Fit Each Value( {Report(0)}),
By(:sex)
);
biv << ( Curve[1] << Line Color ( {0, 0, 255 } ) );
biv << ( Curve[2] << Line Color ( {213, 72, 255 } ) );
回复:应用程序脚本编写... 分组依据,变量该问题似乎是范围界定问题。在添加之前我无法成功运行您的脚本
Names Default to Here( 1 );
这是您的脚本,其中列名称指向 Big Class 数据表。
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
age=13;
Bivariate(
Y( :weight),
X( :height),
Show Points( 0 ),
Fit Where(
:age == 12,
Fit Each Value( {Report( 0 ), Line Color( {0, 0, 255} ), Report( 0 )} )
),
Fit Where(
:age == age, //this is troublesome line... the graph is generated but not quite right.
Fit Each Value( {Report( 0 ), Line Color( {213, 72, 87} ), Report( 0 )} )
),
By( :sex)
);