回复:使用 JSL 脚本的下一级自动化添加@Jordan_Hiller和@ChristianBille对此评论。
谢谢大家把这个放在一起。 我有一个关于“泛化”的后续问题,它更多地与我缺乏脚本能力有关。 通常在我的工作流程中,我需要“选择所有列”然后做一些事情,无论是汇总、分组、探索缺失值等。但是,我有数千列,它们在每个新数据表中都有不同的名称,所以当它提示我找不到一个特定的列时,我不能只替换 5,000 列(这需要几个小时)。 我想知道我是否可以先对列进行分组,然后在该组上执行剩余的工作流程步骤。 我可以给小组起一个通用名称。
另一种方法是尝试通过名称中的属性来选择列,如下面的脚本所示。 是否有办法将其脚本化到工作流的下一步中包含此脚本生成的 SELECTED 列的位置? 例如,如果我想转置名称中带有“the”的所有列,是否可以将该脚本嵌入到工作流中? 我正在考虑如何避免在每个文件中重新编码列名,尽管这是另一种选择!
我意识到 Workflow Builder 可能在您要处理许多格式相同的表格时效果最好,但我想弄清楚当每个表格略有不同时我是否可以让它合作。
names default to here(1);
dt=current data table();
colNames = dt << get column names(string);
for each({Name}, colNames,
if(contains(Name,"nox"),
for each row(
column(name)[row()] = ???????????; // your formula here
)
);
);
回复:使用 JSL 脚本的下一级自动化如果我理解你的问题, @abmayfield ,您问的是 JMP17 工作流是否可以容纳大量不断变化的列名。 我会说是的,这是可能的,但必须在工作流中插入一些自定义 JSL。
一种好的方法是让您的工作流/脚本作用于用户选择的列前运行工作流程。
下面是一个使用血压样本数据集的示例。
Names Default To Here( 1 );
//Custom JSL: Get the user-selected columns, save them into list CNames
CNames = Current Data Table() << Get Selected Columns;
//Slightly modified workflow step: replace hard-coded columns with list CNames
Data Table( "Blood Pressure" ) << Transpose(
columns( CNames ),
By( :Dose ),
Label( :Subject ),
Output Table( "tdata" )
);
不管你如何攻击这个,解决方案可能会涉及 JSL列出. 稍微了解一下列表可以让您获得新的编码超能力!
使用 JSL 脚本实现更高级别的自动化视频于 2024 年 8 月更新。
工作流是一种无需代码即可自动执行您经常或每天使用的分析和报告的方法。此外,您可以将工作流转换为 JSL 脚本,以提供流畅的用户体验和更精致的演示,并创建可与他人共享的插件。此演示展示了如何理解和修改工作流脚本的基础知识,并使其更灵活地适应新数据和新用户。它假设您具有创建 JMP 工作流的一些背景知识。
案例研究使用了三个来源,我们使用 2015 年至 2017 年的数据构建工作流程,然后编写一个可以处理后续几年数据的脚本。
附件的 .zip 文件包含您练习所需的所有文件,其中包括两个版本的儿童保育 Excel 数据和儿童保育分析 JMP 插件。
了解如何:
- 了解一些 JSL 基本组件
- 创建工作流
- 保存工作流脚本
- 编辑脚本以适用于新数据和新用户
- 根据需要添加用户输入机制(选择文件、列对话框等)
- 选择文件
- 创建 JSL 以根据特定标准选择文件
- 默认为当前打开的数据表
- 选择一列,然后从对话框中卸载选定的列,以便稍后在脚本中对其执行操作。
- 使用嵌入式报告列切换器,而不是选择一列
- 可选择将脚本保存为 JMP 插件以供分发
- 使用文件 > 新建 > 插件创建插件
- 创建菜单项和/或工具栏项来启动脚本
- 包括数据文件、PDF 等。
- 安装插件并与其他用户共享,只需双击 *.jmpaddin 文件即可安装
Jordan Hiller @Jordan_Hiller在现场网络研讨会上回答的问题:
问:如果我的工作流程在流程中生成了一个新表,并且该新表随后被后续步骤调用,我会遇到问题,因为新形成的表将被赋予一个难以预测的名称,例如“无标题 5”。此步骤可以以类似的方式“概括”吗?
答:您尤其会遇到这种情况的地方是当您使用表格菜单中的堆叠、拆分和转置等功能时,以及使用堆叠、拆分、转置制作的内容时。除非您为它们指定明确的名称,否则它们将被称为 u=Untitled 17 或 Untitled 32。因此,请在表格菜单操作期间命名新的输出表。

Renamed split table重命名拆分表
问:如果没有使用 Workflow Builder 运行 JSL 脚本,如何将其转换为工作流?
答:是的,您可以创建一个新的工作流自定义操作,然后将脚本复制并粘贴到窗口中,或者将脚本分解为单独的自定义操作。
问:您能否在 Workflow Builder 中点击“记录”,然后运行脚本?WFB 会捕获脚本的步骤吗?
答:在 JMP 17 及更早版本中,它不会捕获这些步骤。但是,JMP 18 工作流程确实会捕获在工作流程记录时运行的脚本。
问:在使用“by”变量运行拟合模型时,您有什么建议吗?工作流保存了一个实例,其中有每个类别的细分?但是当列有新类别时,如何使其更通用?
答:在 JSL 中按组编写脚本有点棘手。您必须知道如何处理 JSL 列表。我建议您咨询 JMP 用户社区或向用户社区提交问题,您会在那里得到一些好的建议。
问:是否有一个路径变量指向当前运行脚本所在的目录?
答:不,脚本没有路径变量。您可以绕过这个问题。很多时候,当您在 JMP 脚本中指定文件时,如果该文件位于您正在运行的同一脚本中的同一路径/目录/文件夹中,您可以从文件名中删除路径/目录并使用相对路径。见下文。
资源

自动化和脚本回复:使用 JSL 脚本实现更高级别的自动化您可以在 Workflow Builder 中点击“记录”,然后运行脚本吗?WFB 会捕获脚本的步骤吗?
Jmp18:是的
回复:使用 JSL 脚本实现更高级别的自动化谢谢@hogi !我修改了上述问题的答案。正如 hogi 所指出的, JMP 18 工作流程确实会捕获在工作流程录制时运行的脚本。