Make the Answer Button (the red triangle) your friend.Make the Answer Button (the red triangle) your friend.Make the Answer Button (the red triangle) your friend.Make the Answer Button (the red triangle) your friend.让“应答”按钮(红色三角形)成为您的朋友。欢迎回到我的关于脚本编写基础知识的系列联合管理计划。 这是第三个条目一系列这是为您的工作而设计的。 如果您刚刚加入我们,您可能会想看看该系列的早期条目。 以下是一些链接:
看一看;它将帮助您解决即将发生的事情。
好吧,系好安全带。 到目前为止,我们实际上还没有使用任何代码(除非您计算 JSL 脚本索引)。 今天就结束了。 今天我们将使用 JSL 脚本窗口。 我知道这可能会让你们中的一些人感到焦虑。 让我们深呼吸一下,然后开始吧。
不要为了编写脚本而编写脚本!
老实说:短期内编码并不是一个有效的过程。 对于一次性分析和图形,拖放工具在投资回报率方面几乎总是胜过编码(某人进行开发活动的成本太大了)。 有些人坚持使用脚本,无论 GUI 解决方案是否更快。 我不知道为什么,我不在他们的名单里。 当工作流程非常困难或迂回以至于使用 GUI 很容易出现错误时,我会考虑编码。 当我要一遍又一遍地做某件事时,我也会考虑编码,并且我可以通过自动化获得的效率来证明时间的合理性。 这并不是说我编写代码只是为了看看我是否能做点什么。 或者我不会选择更复杂的编码方式只是为了学习新东西。 但这些情况只是例外,而不是规则。
现在,我的这种概括可能已经让一些人感到不舒服了。 这种一揽子声明的问题在于它非常黑白分明。 事实上,就像生活中的一切一样,存在一个灰色地带,其中的价值主张是在点击式解决方案和编码之间犹豫不决。 灰色地带也恰好是大多数有抱负的程序员发现自己的地方。 他们知道通过编写脚本可能会提高一些效率,但他们只是不知道从哪里开始,或者担心最初的学习工作会浪费太多时间。 JMP 设计的优点在于,它为我们提供了一些工具,我们可以使用这些工具开始将 JSL 引入到工作流程中,而在操作 JSL 时不会损失太多效率。 而且,与 JMP 中的所有内容一样,它始于JMP 工作流程。
JMP 工作流程(脚本版)
JMP 工作流程通常以用户转至红色小三角菜单回答问题结束。 红色小三角菜单的另一个功能是为用户提供保存工作的方法(保存脚本)。

保存脚本的方式主要有以下三种:
- 至数据表:此方法将脚本作为“表脚本”保存到数据表中。这些脚本保存了用于在 JMP 中生成给定报告的方法,并且是可移植的(即可以在具有相同列名的数据表之间复制和粘贴)。
- 到脚本窗口:此方法将重现给定报告所需的信息保存到脚本窗口。 它对于多步骤操作或生成多个报告非常有用。 脚本窗口的内容也可以转换为表格脚本。
- 到剪贴板:此方法对于将报表所需的代码移至其他 JMP 平台(例如查询生成器、应用程序生成器等)或为大型项目生成原型代码非常有用。
事实证明,真正高效的程序员会在编码过程中广泛利用这些红色三角形选项。 他们使用它们来加速编码(为什么在不需要时敲击按键?)或生成平台原型代码,否则很容易搞乱并且难以调试。 对于初学者来说,这些选项提供了不同的机会来了解和利用 JSL,同时轻松了解使用它的细节。 这就是我们想要开始编码冒险的地方。
保存脚本 > 到数据表
如果您碰巧是纽约或新泽西地区的 JMP 用户:您好! 我可能曾经访问过你们的公司。 (如果没有,请给我发私信;我们需要解决这个问题。)而且,当我到达现场时,您可能已经听到我在这一点上喋喋不休:你必须保存你的工作,我所说的“保存你的工作”是指使用将脚本保存到数据表红色小三角菜单下的选项。 回到我第一次自动化工作流程的经历,我是这样开始的:将一堆标准化的图形生成器报告保存到我会定期更新的 JMP 表中。 我怎么强调这一点的力量都不过分。 这就像拥有《神秘博士》中的声波螺丝起子一样。 可能性是无止境。
让我们看一个简单的例子:
- 打开帮助 > 示例数据库 > Big Class Families.jmp
- 打开分发对话框:分析 > 分布
- 将年龄、性别、身高、体重填入Y,列,然后单击好的。

- 在“分布”红色小三角菜单下,选择保存脚本 > 到数据表

- 为其指定一个名称(或仅使用默认名称)。 如果在这种情况下使用默认值,它将在数据表中显示为分布2因为已经有一个分配数据表中的脚本。

- 现在回头看看左上角的数据表。 您应该在列表中看到您的表脚本,旁边有一个绿色复选标记。

在本系列的上下文中,这些表脚本可以被视为小小程序(迷你应用程序)或宏。 它们可以在数据表之间直接移植(只需复制和粘贴),前提是脚本中使用的列名称相同。 它们也可以被编辑(右键单击其中一个并选择编辑)。 因此,如果您愿意在脚本中编辑列名,它们也可以移植到没有相同列名的数据表,这没什么大不了的。 我们将在下一篇文章中介绍如何做到这一点。 表脚本还可用于串接较小的脚本以自动化较大的工作流程。 我们还将在下一篇文章中介绍这一点。
保存脚本 > 到剪贴板
我们将介绍红色小三角菜单中的最后一个条目:到剪贴板物品。 我们接下来将介绍这一点,因为该条目与到脚本窗口选项,但指导意义不大。 这并不是说它没有用,只是你看不到发生了什么。 因此,出于时间考虑,这就是它的作用。 它需要创建的代码将脚本保存到数据表并将其放入剪贴板,以便您可以将其放入另一个脚本中的某个位置。 很方便。 而且,随着您的脚本编写技能的增长,您会发现它对您有用的地方。 目前,我想备份到更有趣和有用的选项:保存到脚本窗口。
保存脚本 > 到脚本窗口
中的下一个条目将脚本保存到...红色小三角菜单中,我们将介绍我正在讨论的三个菜单中可能最具启发性的内容。 将脚本保存到脚本窗口正如它所说的那样:它创建一个脚本编辑器窗口(我们将在下一集中深入介绍脚本编辑器)并用 JMP 生成的 JSL 填充它以重新创建脚本中的任何内容。您正在工作的窗口。 本条目的重点是您可以研究代码并从 JMP 生成的内容中学习。
让我们再次看一个使用 Big Class 的简单示例。 继续并单击已保存脚本旁边的绿色按钮以重新运行分析。 然后,在报告窗口中选择保存脚本 > 到脚本窗口从红色小三角菜单。 现在,查看 JMP 在脚本窗口中写入的内容。

JMP 创建了分布报告:Distribution(...);。 JMP 已将两个名义分布子组放入报告中:名义分布(Column(...)) 和两个连续分布子组:连续分布(Column(...))。 在脚本的末尾,JMP 放置了一段非常重要的代码:“;”。 它被称为“胶水操作员”,我们将在下一集中更详细地介绍它。 现在,您只需要知道这是一种在 JMP 运行代码时向 JMP 发出另一条指令即将到来的信号的方法。 事实上,JMP 会自动将其放在最后,从而使新手脚本编写人员的生活变得简单得多。
使该条目如此有用的最后一点是,如果您将该脚本窗口保持打开状态,会发生什么情况。 继续并关闭分发平台,但保持脚本编辑器打开。 现在,使用打开的数据表,创建一个 Fit Y by X 报告(在“分析”下),使用身高作为 X 变量,体重作为 Y 变量。

接下来,选择将脚本保存到脚本窗口再次。

您是否注意到窗口是如何用另一个条目更新的? 一旦您知道如何运行一个窗口,该脚本现在将重新创建您刚刚使用的两个窗口。 说到这……
运行脚本
那么,脚本窗口中已经有了一些代码,现在做什么? 您可能希望能够运行您创建的代码。 我的意思是,你可以把它保留下来,以给走过你办公桌的人留下深刻印象,但最好运行它。 在 JMP 中运行代码有多种方法:主菜单、键盘快捷键、脚本窗口顶部的工具栏、Enter 键或右键单击。 让我们快速浏览一下其中的每一个。
主菜单和键盘快捷键
这运行脚本命令在 Windows 和 MacOS 中位于同一位置。 如果您位于脚本窗口中,请转到编辑 > 运行脚本。 其热键是CTRL+R用于窗户和命令+R对于 MacOS。
脚本窗口顶部的工具栏按钮
如果您查看脚本窗口的顶部,您应该会发现运行脚本按钮(除非您隐藏了工具栏)。 在 Windows 中,它看起来像一个绿色的小播放按钮,类似于表脚本的按钮。 在 MacOS 中,它看起来像一个带有 JMP Man 和绿色播放按钮的 JSL 小文档。
使用 Enter 键
请注意,这里我指的是扩展键盘上数字键盘右下部分的按钮。 如果按下该按钮,JMP 将运行光标所在的 JSL 行。 在熟悉 JSL 调试器之前,我经常使用它。
右键单击
选择一些代码并右键单击将弹出一个上下文菜单,其中包含运行脚本选项朝底部。
我建议您尝试不同形式的运行脚本并找到您最喜欢的一种。 我偏爱热键,除了在“应用程序生成器”中时,我更喜欢使用工具栏选项。 随着时间的推移,您可能会被其中一两个所吸引,成为您最喜欢的。 另外,作为旁注:所有这些选项的作用都略有不同,具体取决于您是否选择了一段代码、光标位于行尾还是光标位于空行。 所以你可能也想尝试一下。
本周总结
好吧,不管你信不信,你现在已经获得了足够的信息,可以对 JSL 造成疯狂的危险……当然,是以一种好的方式。 让我告诉你我的意思。
让我们使用今天创建的脚本。 我将通过包装 New Window(); 进行一些小小的调整;围绕 JMP 创建的分布函数和双变量函数。 您可以了解有关新窗口的更多信息(...);在脚本索引中。 请注意 New Window(...) 的第一部分;从第 1 行开始,最后一部分在第 10 行! 我已经设置了脚本编辑器来绘制一条连接它们的漂亮的小线,这样我就可以看到它们在哪里(稍后会详细介绍)。

然后,让我们复制该脚本的文本并返回到数据表。 选择新脚本从数据表左上角的红色小三角菜单中。

将脚本文本粘贴到对话框中,为其指定一个有用的名称,然后单击好的。

如果您按照步骤进行操作,您应该会在数据表的脚本区域中看到您的报告。 如果你运行它,你应该得到这样的结果:

这就是我用来将为期两天的分析马拉松变成 15 分钟的剪切和粘贴练习的小技巧。 我花了一点时间将数据放入可以轻松更新的 JMP 数据表中。 然后,我使用该报告将该报告所需的所有图表导出到单个 JSL 窗口中将脚本保存到脚本窗口。 我将它们包装在一个新窗口中(以便它们都位于一个位置),并将该脚本放入数据表中的表脚本中。 我在 JSL 工作吗? 是的。 我写了很多代码吗? 不。 我的效率提高了吗? 确实。
现在我们正在进入实际的编码,我需要强调最后一点。 编码是为了提高你的效率:
- 您解决问题的效率如何。
- 您创建报告的效率如何(以便您可以重新解决问题)。
- 您处理数据的效率如何。
我们将在本系列中创建的代码是计算机生成的或者很简单。 没关系。 是关于高效的代码不性感的代码。 当我上大学时,我的一位教授(一位音乐家同事)在他办公室外的墙上挂了一句话:简单的音乐并不比复杂的音乐更好或更坏。 代码也是如此。 不久前,教我编码的人让我想起了这一点。 所以,请记住:简单的代码并不比复杂的代码更好或更差。 重要的是它满足其预期目的并提高使用它的人的效率或生产力。
家庭作业
在本周的练习中,您将回顾您的问题陈述。 仔细考虑您创建的遗留问题清单,并使用我们今天介绍的工作流程生成代码。 该代码可以是您将要使用的实际代码,也可以是您认为需要稍作修改才能回答问题陈述的原型代码。 尝试使用红色小三角菜单生成您认为需要的尽可能多的零碎内容,并将它们保存为 .jsl 文件。 如果您遇到困难或无法找到让 JMP 生成所需代码的方法,请在社区或此处的评论中寻求帮助。 不要忘记搜索帮助,也不要忘记您也可以搜索社区!
下次再见,祝你好运,编码愉快!
嗨,迈克,
我只是想说这是一个多么棒的博客系列啊! 我是一个相对经验丰富但自学成才的程序员,阅读这些文章强化了我多年来通过艰苦的方式学到的许多关键知识...... 为什么你不能在20年前写下这篇文章来减轻我的痛苦呢?
不过说真的,谢谢。 与 JMP 一样,每次使用该软件时我都会学到一些新东西,今天对我来说的新技巧是使用数字键盘的 Enter 键来运行代码 - 谁知道?!?
非常感谢,
安德鲁