为什么是 ::labelslist?Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
labelsList = {"F" = "A", "M" = "B"}; //here namespace
::labelsList = {"F" = "①", "M" = "②"}; // global variable
f = function ({},
{default local},
labelsList = {"F" = "X", "M" = "Y"} ; // local variable
dt:sex << Set Property( "Value Labels", labelsList ) // which variable will JMP pick?
);
f
JMP 19.1: ①,②
JMP 18.2.2 和 JMP 20EA: X、Y
变通方法:
- 使用dt:sex <
- 使用Eval (Eval Expr( ... Expr (labelslist) ))
自动化和脚本编写
回复:为什么是 ::labelslist?更难理解的是最初的错误信息:

delete symbols (::labelsList);
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
f = function ({},
{default local},
labelsList = {"F" = "X", "M" = "Y"} ;
dt:sex << Set Property( "Value Labels", labelsList )
);
f
回复:为什么是 ::labelslist?“未知”表示 JMP 捕获到了一个意外错误,并且没有更好的解释。请报告此错误并说明您认为应该如何解决;开发人员将有机会修复此问题,要么使其以合理的方式运行,要么改进错误信息。
回复:为什么是 ::labelslist?JMP19 可能对数据表进行了评估,所以才使用了全局值。你可能会质疑是否应该进行这种评估。
该列存储列属性及其提供的值,而不对提供的参数进行评估或验证。要使用 JSL 代码添加包含变量的列属性,脚本必须将所有变量转换为其实际值。 脚本指南 > 数据表 > 处理列 > 设置或获取列属性.
如果您使用 JMP19 将变量用 {} 包裹起来,也可以使 JMP 崩溃(JMP18 不会崩溃,但您会收到尝试赋值错误)。