用于选择不同观测值的动态对话框我有以下数据。 我想创建一个对话框,该对话框将显示游戏栏中可用的不同类型的游戏,并为用户提供选择每个游戏类型的选项。 一旦用户为每个游戏选择了类型并单击“确定”,那么它应该更新原始表,添加新列,其中包含每个游戏的游戏类型。 此外,如果用户为特定游戏类型选择了可能的游戏,则该游戏应该从对话框中的游戏列表中隐藏,以避免重复。
下面是我的原始表和最终表。 交互式对话框应如附图所示,用户可以在其中拖放适用于相应游戏类型的游戏选项。 只有在选择了所有游戏后,“确定”按钮才会激活。
请帮我创建相同的 .jsl 脚本。
原表:
| 姓名 | 游戏 |
| A | 足球 |
| A | 棋 |
| A | 羽毛球 |
| 乙 | 足球 |
| C | 棋 |
| 乙 | 乒乓球 |
| D | 没有什么 |
决赛桌:
| 姓名 | 游戏 | 游戏类型 |
| A | 足球 | 户外的 |
| A | 棋 | 室内的 |
| A | 羽毛球 | 室内的 |
| 乙 | 足球 | 户外的 |
| C | 棋 | 室内的 |
| 乙 | 乒乓球 | 室内的 |
| D | 没有什么 | 不适用 |
谢谢 :) 
回复:用于选择不同观测值的动态对话框特纳克斯@gzmorgan0
感谢你的帮助。
我正在使用 JMP 14。回复:用于选择不同观测值的动态对话框@拉贾特,
附件是修改后的脚本。 注意事项:
- 使用 ComboBox 作为类别选项列表,由脚本内部的列表设置。
- 通过从源列表中选择、组合框中的当前类别并按“分配”按钮来进行分配
- 作业列为游戏名称 > 类别
- 添加了更新按钮,以便可以增量更新表
- 仅为尚未分配游戏类型的游戏创建源列表
- 必须更改删除和写入表的操作。 现在 lb1(分配列表框)中的项目在单个字符串中包含 2 条信息。 Word(n,string,delimiter) 函数用于提取相关信息。
屏幕截图显示已完成一项分配。 对于此视图,如果用户按分配,羽毛球和足球将被分配为室外。
该接口减少了显示框的变量数量。创建有用的界面需要了解应用程序、需求和用法,了解一些基础知识或找到接近您想要的示例代码并理解它。 请注意,此脚本有许多替代方案。祝你好运!

JSL 用于对话框布局。 附上完整脚本。
//--Dialog
usr = New Window("Using List Boxes", <<MODAL></MODAL>回复:用于选择不同观测值的动态对话框@拉贾特,
您没有提及您正在使用哪个 JMP 版本。如果是 JMP 14,请从 JMP 主菜单中选择帮助 > 书籍 > JMP 脚本编写指南。 这是一本精装书的 PDF 版本。 第 11 章,从第 517 页开始,“构造自定义窗口”部分开始。这是一个非常好的学习来源。
还帮助 > 脚本索引 >在顶部灰色按钮上,按下并选择展示盒。从左侧选择一个显示框构造函数,然后在右侧查看语法,然后您可以运行 1 个或多个简单示例脚本,或者复制并粘贴并制作您自己的脚本,以了解每个构造函数的工作原理。我建议你查找:按钮盒,列表框哪些是构造函数。 面板盒,排队框,列表框(HListBox、VListBox)是用于排列对话框布局的容器。
要真正学习如何编写脚本,您确实需要了解工具,并且这个学习过程可能需要时间。然而,许多脚本编写者通过获取现有脚本、阅读、运行、修改以满足他们的需求来学习,
既然你说这需要很多变量,我假设你需要 3 个以上的类别(室内、室外、无)。 正如我在上一篇文章中所说,有很多方法可以实现这一点,我使用了复制粘贴代码。如果您有很多类别,我会使用以下提供的示例修改我的脚本@pmroz 。 我将使用组合框从类别列表中进行选择,并且仅使用一个按钮框(分配)和一个分配框。如果我有时间,我会修改我的脚本并附上它。
JMP 到 JMP 脚本编写,2和JSL Companion,JMP 脚本语言的应用,第二版您可能会发现另外两本书对于学习 JSL 很有用。
回复:用于选择不同观测值的动态对话框谢谢@gzmorgan0
我正在寻找这个解决方案。
我正在尝试理解代码。 看来我们必须创建这么多变量。 您能给我推荐任何好的视频教程系列(最好)或任何我可以参考的书籍来学习使用 jsl 创建交互式对话框吗? 我刚开始创建这些对话框。
谢谢 :)
回复:用于选择不同观测值的动态对话框@拉贾特,
大多数用于构建自定义对话框的 JMP 脚本语言、JSL、对象和函数都以表列为目标。 考虑 JMP 内置对话框窗口正在请求列。 有些对象可用于自定义选择,但这些“值”对象通常需要更多编程。例如,一个 ColListBox 对象有一个内置的拖放界面:可以将一个列名拖到另一个 ColListBox 中,并且列名是唯一的。
JSL 确实提供了 ListBox() 对象,但是,现在脚本编写人员的工作是确保唯一性。 例如,根据您对任务进行编码的方式,您必须管理“足球”只有一种分类,并且名称仅使用一次。
一种方法是不使用对话框,而是创建独特游戏和游戏类型的表摘要,让用户更新此缩短的表,然后更新源表。 此方法类似于旧的数据库更新接口。
我附加了一个非常简单且不太优雅(重复的暴力代码)脚本来完成所描述的任务。因为你还没有读过这本书,所以我保持简单。脚本界面包括一个删除按钮,以防意外选择了错误的游戏类型。我没有创建联合函数(因此游戏列表没有重复项)以及确保游戏不被分类为室内和室外的函数,而是构建了在选择类别后从源列表中删除游戏的代码。
您应该阅读有关关联数组、键控列表、ListBox、ButtonBox 和 Set Function() 的内容。
下面是对话框和脚本的对话框部分的屏幕截图。 附上完整的脚本。请注意,这可以使用 DataFilterBox 来完成,但 ListBox() 更容易使用。 顺便说一句,这是在 JMP13 和 14 上进行测试的。

//--Dialog
usr = New Window("Using List Boxes", <<MODAL></MODAL>回复:用于选择不同观测值的动态对话框你好@pmroz
感谢回复。
在我的实际数据集中,我有 1000 个游戏,其中有 25 个独特的游戏,而且我只有三个类别:1.室内 2.室外 3.不适用。 通过这种方法,我必须为每 1000 个游戏选择游戏类型。 我也尝试过独特的游戏,但没有成功。
我们可以有一个窗口只显示游戏的独特价值吗? 此外,它应该允许游戏的多重选择,然后为所有多重选择的游戏选择游戏类型,因为如果独特游戏的数量增加,为游戏的每个独特值选择游戏类型是乏味的。回复:用于选择不同观测值的动态对话框这是一个使用带有 col 框的表格框的解决方案。根据您的游戏类型进行调整。
dt = New Table( "Games", Add Rows( 7 ),
New Column( "Name", Character, "Nominal",
Set Values( {"A", "A", "A", "B", "C", "B", "D"} ) ),
New Column( "Game", Character( 16 ), "Nominal", Set Values(
{"Football", "chess", "Badminton", "Football", "Chess", "Table Tennis", "Nothing"} ) ),
new column("Game Type", Character, "Nominal")
);
game_list = dt:game << get values;
ngames = nitems(game_list);
selected_type = {};
type_list = {"No choice made", "Outdoor", "Indoor", "Nothing"};
game_type_cb = {};
game_type_colb = col box("Game Type");
for (i = 1, i <= ngames, i++,
selected_type[i] = "No choice made";
game_type_cb[i] = combo box(type_list);
game_type_colb << append(game_type_cb[i]);
);
nw = new window("Game Type Setting",
panel box("Select game type for each game",
tb = table box(
string col box("Game", game_list),
game_type_colb
),
),
panel box("Actions",
hlistbox(
okb = button box("OK",
for (i = 1, i <= ngames, i++,
selected_type[i] = game_type_cb[i] << get selected();
dt:game type[i] = selected_type[i];
);
show(selected_type);
nw << close window;
),
canb = button box("Cancel",
nw << close window;
),
)
)
);