最佳脚本编写技巧大家好,
我开始学习 Monica Beals 协助制作的脚本课程: JMP 脚本语言简介 - JMP 用户社区
仍在学习,但我有一个基本问题
您认为每个人都应该知道的脚本命令/技巧是什么?或者您希望早点知道的脚本命令/技巧是什么?
例如:pickfile 是一个值得人们了解的好东西,因为它允许您选择任何您想要运行一组命令的文件。
回复:最佳脚本编写技巧我希望早点知道的三件事:
- Open() 通常可以让脚本编写者跳过 Pick File () 脚本
- Alt+双击脚本窗口中的任何函数,即可直接进入该函数的脚本索引
- 编写报告层的脚本比看上去要容易得多,尤其是最近添加了属性查看器的 Box Path 部分:
-

回复:最佳脚本编写技巧我将在@Jed_Campbell的 3 中添加 3:
- 在任何情况下都不应使用当前数据表来设置当前数据表。应通过创建表时实例化的变量引用显式访问表。许多脚本编写者很难跟踪哪个表是当前表,特别是当有大量连接、堆栈或子集时。除此之外,设置为当前表的表多年来根据操作而发生了变化。我发现这比其他任何事情都更容易导致脚本崩溃。
- 不要乱用SendToReport 。它的功能没有很好的文档记录,并且(几乎?)总是有一条消息可以更轻松地完成工作并使您的代码更具可读性。
- 了解如何使用表达式处理( Substitute 、 Eval 、 Expr和Name Expr )。 @joseph_morgan ( 此处)和@drewfoglia ( 此处和此处)的 Discovery 材料很好地讨论了这个概念。我在 JSL Cookbook 中有两个食谱涉及它(此处和此处)。这是一个很难清楚理解的主题。但是,一旦掌握了它,您将能够做其他方式无法做到的事情。如果无法通过表达式处理完成,那么也无法在 JSL 中完成。
回复:最佳脚本编写技巧不否认已经说过的内容,但@DonMcCormack 的第 3 点是您接下来可以学习的最关键的内容。表达式处理非常强大,可让您访问 JSL 中令人惊叹的功能。一旦您意识到 JSL 中的所有内容都是表达式,您就会开始以完全不同的方式看待您的脚本。我会研究 Joseph 和 Drew 的材料,然后研究他们的例子。
之后,我个人最喜欢的是:
- 新的 For Each() 循环(及其相关项 Filter Each() 和 For Each Row())。除非您需要在非常旧的 JMP 版本上运行脚本,否则我会忘记旧的 For() 循环的存在。
- 与 1 相关,索引函数的简写版本:即 1::10::2 将创建一个从 1 开始以 2 为单位计数到 10 的向量(将给您 1,3,5,7,9),您可以在 For Each() 循环中使用它。
- 关联数组及其使用方法(包括如何通过 For Each() 循环处理它)。
- 学习尽可能使用矩阵而不是数据表(以及如何在 For Each() 循环中使用它们)。
回复:最佳脚本编写技巧由于您是新手:
- 分号。如果 JMP(或 SAS)中出现问题,请先查看此处。修复起来很简单,只需勾选复选框即可,因此经常是罪魁祸首。接下来是括号和方括号。[1b。日志通常无法正确表示这些连续的句子。通常还要查看前面的代码行。]
- 在构建/测试脚本时,请大量使用 Print()。“此变量是否是我在此循环阶段所期望的值?”:Print(“Varname: ” || varname)。“进程在哪个阶段挂起(例如无限循环)?”Print(“完成第 3 步,在第 4 步之前”)。[2b:如果项目可能会继续增长,请创建一个变量用作指示标志(0/1 或 T/F),并在您想要调试时使用 If() 语句打开 Print() 语句。]
- 像 DoE 一样,从小处着手。例如,如果您想通过 For Each() 循环运行 100 个项目,请仅使用前 2-4 个项目测试循环。节省等待和潜在的崩溃。
Mike 还撰写了一系列博客来阐述他的想法:https
/community.jmp.com/t5/JMPer-Cable/The-1st-thing-I-wish-I-knew-when-I-started-scripting-There-are/ba-p/276580
关于 Eval/Expr 函数,我还没有编写足够多的 JSL 来适应它们。但在我的编码经验中,没有什么比能够在 SAS 的宏功能中使用 &(和 &&&......美好的回忆!)更激动人心的了,到目前为止,我认为 Eval/Expr 是 JSL 的并行函数。(背景:我加入 JMP 之前的大部分职业生涯都是 SAS 编程,但我也涉猎过其他东西)。
回复:最佳脚本编写技巧您的 #1 项让我想起了一个每个人都应该知道的绝妙技巧:Ctrl-[ 选择括号内的所有内容。这对于调试、检查完整性,尤其是代码修改(复制/粘贴/替换)非常有用。