使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?我试图通过使用一致引用更新脚本来纠正我编写的脚本中以前的“罪过”,即,以便该脚本引用我(想要)告诉它的一个表,即使另一个表可能是当前的(或“干扰”)表。 我尝试重构下面的问题。
Names Default To Here( 1 );
// this is the table i want to work with
dt = New Table( "Target table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"A", "B", "C"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"X", "Y", "Z"} ),
Set Display Width( 45 )
),
New Column( "NumericRight",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3] ),
Set Display Width( 78 )
),
New Column( "NumericAlso",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
dt2 = New Table( "Interfering table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"D", "E", "F"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"U", "V", "W"} ),
Set Display Width( 45 )
),
New Column( "NumericInterference",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 5, 6] )
),
New Column( "MoreNumeric",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
// get lists
lstName_1 = Associative Array( dt:Name_1 ) << Get Keys;
lstName_2 = Associative Array( dt:Name_2 ) << Get Keys;
colList = dt << Get Column Names( "Numeric" );
// window with radio buttons & col list box
New Window( "Select values",
Show Menu( 0 ),
Show Toolbars( 0 ),
Border Box( Top( 0 ), Bottom( 20 ), Left( 20 ), Right( 10 ),
H List Box(
Panel Box( "Name_1",
Radio Box(
Eval List( lstName_1 )
)
),
Panel Box( "Name_2",
Radio Box(
Eval List( lstName_2 )
)
),
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
)
)
);
我想看什么:

如果我的“目标表”不是当前表,我总是会看到什么:

让我完全困惑的是,当我更改名称时dt2:数值干扰到dt2:数字右,我得到这个结果:

为什么 dt2 不让我的脚本完成我想要它做的工作? 为什么 dt2 中列的名称更改会影响列列表框中的内容? 我尝试了几种移动方法列列表变量并尝试将其包装到评估列表() ,没有“运气”。
再次在社区搜索,发现了这个需要有关填充列列表框的帮助。 如果有其他解决方案,谢谢您告诉我。 或者,这就是它本来的样子吗?如果是的话,这是什么意思?
自动化和脚本编写回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?你好,
乍一看,您只需要使用以下语法即可从表 dt 中获取数字列的列表:
clb = Col List Box(dt, all, << Set Data Type ("numeric"))
此外,还不清楚“clb <
最后,我认为您不能在多个表中使用 Col 列表框(如果我错了,请纠正我)。
最好的,
TS
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?似乎 col 列表框只接受创建 col 列表框时“当前”数据表中的列。
如果 dt2 不包含相应的列,则无法添加。
我猜
current data table(dt);
// window with radio buttons & col list box
New Window( "Select values",
你没有选择吗?
如果没有,则使用
clb = Col List Box( Data Table(dt) )
指定 col 列表框应使用哪个数据表:

回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?谢谢@蒂埃里_S ,我明天会尝试这个。 但是,如果 dt2 从脚本中被注释掉,Col 列表框将按预期更新,因此它肯定有效(另请参阅我原始帖子中的第一个屏幕截图)。
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?@hogi ,谢谢,明天我也试试这个,让你知道结果。
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?@蒂埃里_S ,奇怪且不幸的是,这不起作用。 在我最初发布的脚本中,我根据您的建议进行了以下更改:
// this part was revised ...
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
// ... to look like this.
Panel Box( "Numeric Columns",
clb = Col List Box( dt, all, << Set Data Type ( "numeric" ) ) // this adds the numeric columns from dt2. Why???
)
这给出了以下结果,意味着 dt2 中的数字列被添加到列列表框中,而我想要的是 dt 中的数字列。

尽管如此,学习对我来说还是非常有用的。 谢谢你!
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?
@雷塞尔写道:
@蒂埃里_S ,奇怪且不幸的是,这不起作用。</CODE></P><HR /></BLOCKQUOTE><P> </P><P>代码几乎是正确的,但你必须使用</P><PRE><CODE class=" language-jsl">clb = Col List Box(Data Table(dt), all, << Set Data Type ("numeric"))
你也可以使用
clb = Col List Box(all, << Set Data Type ("numeric"), Data Table(dt))但你不应该忘记“指标”*) Data Table()。
正如我之前的文章(如下)所示,根据脚本指南,它必须是

与列名称一样,使用名称或引用并不重要。
但它必须是数据表(名称或表引用),而不仅仅是没有指示符的参数。
这有点误导,因为通常数据表(名称)可以替换为数据表引用:)
但在这里,数据表是一个可选参数 - 因此,必须有一个指示符 *) 以便 Jmp 知道它是什么。
*) “指标”的正式名称是什么?
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?@hogi , 我很惊讶! 感谢您的帮助。
- 当然,将所需的表设置为当前表是可行的。 不知怎的,我还是想避免这种情况。
- 但下面的代码也有效
Panel Box( "Numeric Columns",
clb = Col List Box(Data Table( dt ))
),
clb << Append( colList ); // this is still required, which I find interesting, since I thought the clb was already added above via Col List Box(...)
相比之下,下面的则不起作用。 相反,它添加了 dt2 中的数字列,这对我来说没有意义。
Panel Box( "Numeric Columns",
clb = Col List Box(dt, all, << Set Data Type ( "numeric" )) // adds numeric columns from dt2 :(...
),
/*clb << Append( colList );*/ // doesn't matter whether this is commented out or not
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?你好@雷塞尔。
我不得不承认,这也让我有点困惑:)
他们应该用过
Col List Box(<FROM data="https://community.jmp.com/" table=""></FROM>
作为可选参数......或其他任何东西 - 但不同于数据表(“表名”)
- 有点误导,对吧?
作为 Jmp 用户多年后,人们很想将整个表达式替换为dt - 从而忘记“指标”。
另一方面,很高兴可以使用表引用而不是表名称作为数据表的参数:)
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?像您这样的用户的存在和帮助使包括我在内的很多人在脚本编写和其他 JMP 相关技能方面得到提升。 这是善意,我们非常感激。
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?@蒂埃里_S , @hogi供参考 - https://www.pega-analytics.co.uk/blog/handling-lists-of-columns/
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?谢谢你的链接, @大卫_伯纳姆博客包含一系列精美的宝石!
我刚刚阅读了分发平台中有关列引用的部分。
有趣 - 根据脚本索引,它是:

由于没有“ <>”围绕 Column() 参数,人们可能会认为柱子()是唯一的、非可选的参数
- 它是否使用柱子()函数生成列引用?
但实际上它是一样的数据表()在前面的讨论中:
柱子()是一个指标为选修的争论:
- 它可以放在任何地方并且可以省略
- 它接受一列或 >=1 列的列表(作为引用或名称) - 清楚地表明这不是 column() 函数
我在脚本索引中发现了另一个条目,其中 Columns() 参数前后的点表明该参数是可选的。
在这里,它是列[复数] - 就像 GUI 中一样。 是是另一个别名。 两者都有助于不被功能分散注意力柱子() 。

// aliasDistribution(Column("height"));
Distribution(:height); // doesn't work<BR /><BR />Distribution(Columns("name", :sex)); // accepts >=1 arguments; column references and names<BR />Distribution(Columns({"name", :sex})); // accepts lists
<BR />Distribution(Continuous Distribution(Column( :height ))); // Distribution can be used without a Column() argument<BR />
Distribution("dummy 1st entry", Columns("height")); // Column at non-first position -> works<BR /><BR />Distribution("hello"); // not necessary to provide a meaningful (first) argument<BR /><BR />Distribution(Columns("name")); // alias<BR />Distribution(Y("name"));
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?脚本指南确实提供了一些术语解释脚本编写指南 > 编写 JSL 脚本简介 > JSL 术语
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?
所以术语是命名的论据
- 命名参数始终是可选的 - 脚本索引中带或不带 < > 
不幸的是,没有明确指出:
那么命名参数的“指示器”的正式名称是“姓名“?
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?官方名字? 指标?
脚本编写指南 > JSL 构建块 > JSL 语法规则 > JSL 名称规则
在 JSL 中,名称只是对项目的称呼。 当您将数值 3 赋给表达式中的变量时一个= 3 , A是一个名字。
回复:使用存储在变量中的列表更新列列表框未按预期工作。 这是它本来的样子吗?这就是令我困惑的地方。
我们了解到,列(“高度”)在
Distribution(Columns("height"));是一个(可选)命名参数。
那么,什么是列在分布(列(“高度”)); ?
从语法的角度来看,它可能是“名称” - 赋予命名参数。
但这会与标准定义相冲突姓名在JSL。 (比较:作为名称(x))
我想我不是第一个问这个问题的人 - 我想命名参数的名称有一个正式名称。
但我没有足够幸运在文档中找到它。
@马克贝利?