导图社区 JMP脚本读书笔记思维导图
一篇关于JMP脚本读书笔记思维导图,JMP软件的脚本笔记,记录功能以及说明,干货满满,有需要的朋友赶紧收藏吧!
编辑于2023-11-24 09:50:52《JMP脚本学习笔记》
3、编程基础-运算符
逻辑运算符
JSL语言元素
比较检验的特例
all/any/is missing
缺失值
对于大多数比较和逻辑运算来说,缺失值还会传播缺失值。除了OR和AND。
缺失值的解释:当无法知道数据的值时,可以认为是缺失值,也可以认为所有可能出现的值。
注意:不可以直接和显式缺失值进行比较,只能与变量、矩阵或其他可能包含缺失值的值进行比较。如需进行直接比较,使用ismissing或zero or missing
只有数值缺失值才被视为缺失值。缺失字符值只能视为长度为0的字符串,不能视为缺失值。
短路行为
JMP的比较运算符和逻辑运算符都是短路运算符,也就是只要返回结果,就会停止工作。
应注意:①当后一个参数依赖前一个参数时。②过于繁琐的计算导致JMP出现计算错误。③当依赖于要执行的后一个参数时。请小心放置赋值语句,以免放在表达式中永远不执行。
日期运算符
日期和时间运算符
日期/时间数据在内部作为秒数(自1904年1月1日午夜起)来处理。
构造日期
使用Date DMY(1,12,2003),today()
提取日期的部分
例如day,year,day of week,week of year,time of day等
日期算术
对日期/时间数据执行常用的算术运算。
转换日期/时间单位
运算符in minutes,in hours,in days,in weeks,in years用于使用除“秒”以外的其他单位重新表示时间间隔。
查询函数:确定拥有哪些类型的数据元素
要检查是否已经为全局变量赋值,使用is empty() Type函数将返回命名结果值类型的字符串。 is scriptable()会检验前面的结果是否可脚本化。
编程函数
1、summation(I=1,50,body),迭代运算,第一个参数为起始值,第二个为限制值,第三个为主体函数,循环执行至超出限制值。计算主体函数的总和
2、normal distribution(p,mean,sigma),返回小于p的正态分布概率值,如不指定均值和标准差,则认为标准正态分布。
3、使用调试器,首行为/*debug run*/,或/*debug step*/。
4、综合表达式
glue 或 ; 分号运算符将连续计算每个参数,并会返回最后一个参数的结果。其他语言中分号为终止符,在JSL中,仅仅用于结合表达式的二进制运算符。返回的结果为最右面的表达式结果。
First 函数first和glue函数类似,只不过返回的是第一个参数而不是最后一个参数。
root(n,《a=2》)返回n的a次方根
5、迭代:JSL提供For、while、summation和product来根据指定条件迭代操作
For(init,while,iter,body),函数for会计算init表达式,但是仅计算一次。然后会检验while表达式。如果不为真,它就会中断。只要while为真,寄回执行body和iter表达式
混淆警告! 如果您学过 C 语言,请密切观察 JSL 和 C 在使用分号和逗号时 的差异。在 JSL 中, For 是一个使用逗号分隔参数、然后使用分号连接它们 的函数;而在 C 语言中, for 是一个使用分号分隔参数、然后使用逗号连接 它们的特殊子句。
while(condition,body),while是一个和for相关的函数,它可重复检验条件,并且只要条件为真,就会执行其主体脚本。
求出比x大的2的最小次幂 x=287; y=1; while(y<x,y*=2);show(y);
summation(初始参数,限制参数,主体表达式)返回主体表达式的计算值的总和,每次从初始参数增加变量,直到大于等于限制参数为止。
product和summation类似,只不过它是将主体结果相乘而不是相加。
6、条件函数:JSL提供了5个函数来有条件的执行脚本,其中有IF,MATCH,CHOOSE,interpolate和step
if(条件1,结果1,条件2,结果2...........,else result),按照顺序计算条件,直到返回第一个非零结果,返回对应的结果语句,否则将返回elseresult结果。
注意:如果至少一个条件的计算结果为缺失,则此函数将继续计算,并且只有在所有子句的计算结果均不为真,同时至少有一个条件返回缺失值时,才返回缺失值(而不是计算else result子句)。解决办法就是在末尾加入一个始终为真的条件。
y = Match( x, v1, expr1, v2, expr2, ..., exprElse )找出第一个等于 x 的 vN 参数并计算和返回对应的 exprN 参数,若没有等于 x 的值,则计算并返回 exprElse 参数。
y=choose(i,expr1,expr2,...,exprElse),计算并返回第i个expr参数,若没有第i个expr参数,则计算并返回exprElse参数。
interpolate(x,x1,y1,x2,y2,....)或interpolate(x,xmat,ymat),将在两点之间以线性方式插入给定的x值对应的y值。
需注意,x点需要按照升序排列
step(x,x1,y1,x2,y2,...),通过阶梯函数拟合,而不是点间的线性拟合来计算给定的x对应的y,它会返回小于或等于x的最大xi对应的yi参数。
需注意,x点需要按照升序排列
7、捕获异常
throw()函数,脚本将会自行停止运行。如果要跳过脚本中的某个出错部分,可以将它包括在Try()表达式中。try(expr,《catchexpr》),第一个表达式通过计算throw引发表达式时,会立即停止计算第一个表达式并且不返回任何结果,并计算第二个表达式。
8、宏功能
存储表达式可用作宏功能。使用expr来存储表达式,来延迟计算,直到实际调用全局变量
9、局部函数function
Function({x},expr),在{}中指定局部变量,直接声明表达式。
调用某个函数之后, JMP 会计算它的参数并且将其赋给列表中的第一个参数指定的局部变量。然后, JMP 将计算函数的主体,也就是第二个参数
局部符号:可以将变量定义为函数的局部变量,以使它们不影响全局符号空间。此类函数需要将局部变量的值分别放在函数调用计算的每个层。
functionName=Function({arg1, ...}, {Default Local}, body);Default Local用以局部化名称。
递归recurse(x1),对定义函数进行递归调用,直至达到递归条件。
factorial = function({a},if(a==1,1,a*recurse(a-1))); 该功能为计算a的阶乘,a*a-1*a-2*...*1
Local 函数使您可以在不影响周围的名称空间的情况下处理局部变量,例如被调用的脚本存在一个和全局变量相同名称的变量。一般的形式为:Local({list_of_variables_or_assignments}, body );body中的所有名称都会局部解析。
函数include用以打开脚本文件,解析脚本,执行脚本。一般表示include(“pathname”<《parse only>)
载入和保存文本文件load text file("PATH")和save text file("Path",text),可用于处理JSL中的文本文件。
XML解析运算---按时未知,
动态链接库DLL文件,JSL有三个命令可以载入DLL,然后调用DLL导出的函数。
10、主菜单命令(尽可用于Windows)
main menu(“命令”<window name>)注意:用英文,而不是中文,啊啊啊啊
列表和表达式
列表是指用于存储多个不同类型的项的容易,包括数字、文本字符串、表达式、矩阵甚至其他列表。列表只是带参数的函数list。list返回的是未计算值。eval list则返回计算后的
列表赋值
{a,b,c}={1,2,3}; {a,b,c}+=10, {{a},{b,c}}++,abc递增1 --为递减1
只要参数一致并且最终是数值形式, JMP 就会支持列表的任意结构
列表的项数,N = N items(A)
列表下表用于从列表中提取指定项。第一个元素为[1]。
如果列表是赋值列表或函数列表,您还可以使用带引号的名称作为下标: X={a(1),b(3),c(5)}; show(X["a"]);
查找列表中的项,LOC(list,value)返回list中和value相等的所有值的下标矩阵
将脚本存储在全局变量中,expr的主要用途是将脚本(如宏)存储在全局变量中。
例如dist=expr(distribution(column(身高)))
如果执行脚本只需要使用dist;
只有在公式最外层,eval才能发挥作用。
nameexpr 会查找存储在其参数中的表达式。但不计算,且只会解开一层以便获取表达式。
进行多次替换,xstring = "def",eval insert(“abc^xstring^ghi”),结果为“abcdefghi”。
计算列表的表达式,eval list(列表)其中所有项都经过计算。
计算表达式内的表达式,eval expr用于计算其他表达式内的表达式,但是返回的是包括结果的表达式。而eval则是计算表达式内的表达式,然后再计算该表达式。
将字符串解析为表达式,反之亦然。
解析是只讲字符串按照语法扫描成语言表达式。假设我已经将一个有效的JSL表达式读成字符串,现在想要计算它,函数parse将返回表达式。要计算它,请使用Eval函数。
反之,请使用char,将JSL表达式转换成字符串。例如:y=char(expr("a=1")),另外char还允许设置字段宽度和小数位参数。
字符串转换成数字值,需要使用num
处理列表/处理表达式
位置运算符:是指可直接作用于列表或表达式的运算符,名称中均有from或into。 位置运算符的第一个参数必须是L值,即可设定其值的实体(如全局变量)。
非位置运算符:必须直接声明列表或引用可用于计算列表的名称,名称不含from或into,将返回处理后的列表或表达式,但不更改在第一个参数中给定的原始列表。
替代:substitute和substitute into,均可用于查找与列表中的模式匹配的所有项,并使用另一个表达式替换他们。需用expr引用这些参数。
name expr将会查找名称并会复制,但不会计算
substitute会计算全部参数,必须正确引用
substitute into需要L值,因此不会引用第一个参数
用于列表的运算符
名称解析
以下对象类型可使用名称来标示: 1、数据表中的列变量和表变量 2、会话中的全局变量。3、可脚本化对象类型 3、公式中参数和局部变量
混淆警告! 脚本的当前行与数据表中要选择(高亮度显示)的行或数据表 窗口中的当前光标位置不相关
名称绑定规则
1、如果名称后接一对圆括号(),则可视作函数 2、然后将其视作局部变量 3、如果前缀不是:,则将其视作全局变量 4、如果前缀不是::,则将其视作数据表列或表变量 5、然后,将其视作平台启动名称(例如分布,二元) 6、然后、如果将其用作赋值目标(作为L值),则创建和使用全局变量。
当无作用域的名称引用表列时
重新解析无作用域的名称时,他会引用数据表中的列,而不是全局变量。
如果数据表具有使用该名称的表变量,则该表变量的优先顺序最高
列作用域运算符可用于强制将名称解析为列
1、前缀冒号:表示名称只能引用表列或表变量,不能引用全局变量。前缀:指的是当前数据表情景。
2、中缀冒号:通过使用数据表引用将此表示法延伸来指定哪个数据表包含该列。等价函数as column(data table ref,name),例如currentdatatable():name
全局作用域运算符
全局作用域运算符可用于强制将名称解析为全局变量。前缀双冒号::表示名称只能引用全局变量,不能引用表列。,等价函数as global
确定作用域发生在使用下标之前
函数解析规则
在其后接带圆括号的参数列表的名称是JSL中许多情况使用的语法:1、内建函数调用。2、自定义函数调用,3、命名参数。4、脚本中对象的嵌套,可作为具有参数的选项,包含消息的子对象或对象本身可识别的任何其他用途。
4、应用程序-用户和JMP通信
与用户通信
show显示在日志中指定的项目。注意:产生的消息包括变量名称、冒号:、及其当前值。
print将指定的消息发送到日志。注意:只输出每个变量的值,没有变量名称和冒号。
write将指定的消息发送到日志。它抑制了文本字符串外的引号,除非指定了回车符(\!r)表示,否则不会启动新行。
wctch绘制一个窗口,报告列出的全局变量的值。使用指定的参数ALL观察所有全局变量的值watch(a,b),,,watch(all)
beep使用户的计算机发出警告声
speak大声朗读文本
caption弹出一个小窗,向查看者显示一则消息。第一个参数为{x,y}屏幕位置,以像素为单位(从左上角开始)。第二个参数时用于窗口的文本。delayed(n)设置将使得标题及后续所有标题窗口延迟该秒数,直到caption语句发送另一个delayed,delay(0)可完全停止延迟。
注意:每个新 Caption 都将隐藏前一个标题,即一次只有一个标题窗口可用。要在不显示新标题的情况下关闭标题,请使用指定的参数 Remove,caption(remove)。
statusmsg("字符串"),此命令将消息发送到状态栏。
wait(n),降低脚本回放速度的一种方法。暂停指定秒数,才继续处理脚本。等待时仍可运行系统任务。例如wait(0),允许立即显示结果;否则JMP将等待脚本结束,然后才让系统更新窗口。
mail发送电子邮件进行警告
schedule(time,script)计划一个事件,在n秒后执行脚本
web打开指定的链接
获取有关对象的信息
show globals列出定义的所有全局变量及其当前值
show commands在日志显示所有JSL运算符列表
show properties()列出发送到可脚本化对象的操作
host is()查询运算符,返回布尔结果,标识当前的操作系统
jmp version()以字符串形式返回JMP版本
对话框
分为模式对话框和非模式对话框,模式对话框必须立即答复。非模式对话框与JMP报表类似,不需要立即答复。
dialog函数,对话是模式的,意味着用户不能选择,而只能响应对话框。
new window命令构造非模式对话框
使用内建的对话框,忽略用于任务的JSL命令必须参数。
使用挑选对话框
pick file()定位文件的路径信息,并以字符串形式保存
pick directory()命令具有显示为提示消息的可选字符串
files in directory(path),获取指定目录中的文件名列表
通用模式对话框
dialog和column dialog,dialog新建对话框,column dialog允许输入数据表的列参量以及关联变量
排列
Hlist以水平方式顶部对齐并分隔其内容。 Vlist将以垂直列的方式左对齐并分隔内容。
将dialog赋给变量,JMP会将dialog函数返回的列表存储在该变量中,如果调用该变量将调用该列表,而不是调用Dialog。
从对话框卸载结果,使用removefrom可以剔除不需要的结果
设定JMP首选项的脚本方法
查看首选项,show preferences(),all参数可查看所有首选项,nonefault可只查看非默认值的首选项,或platform查看用于平台的首选项。
5、数据表
介绍如何管理数据对象:数据表,数据列和行
获取数据表对象
打开数据表
open常用的是路径参数,如无参数,则显示一个对话框,提示用户定位至一个文件
..\可上移一层文件夹
从文本文件导入数据
复杂
打开数据库
open database 使用ODBC打开数据库,将数据提取至JMP数据表
创建新的数据表
1、dt=newtable(“my.jmp”)
2、新建数据表避免出现窗口,使用invisible关键字 例如:dt = newtable("abc",invisible,newcolumn("x"),addrows(10))
对象与消息
对象是创建后就知道如何执行与自己相关任务的实体。数据表就是这样一个对象。
要处理JSL中的对象,请发送一则消息到该对象,让它执行其任务之一。消息是只能由特定类型的对象根据情况理解的命令。例如数据表对象的消息有save new column sort等。
数据表引用
引用已打开的表
将消息发送至引用
使用<<运算符向对象发送消息,也是Send 函数
可在一个语句中堆叠一系列消息
运行复检到数据表的脚本
run script命令发送到数据表后,会先找到指定性质(即脚本),然后将其作为JSL脚本运行。
关闭数据表
使用close命令,其中数据表引用作为参数。
恢复保存的数据表
要回复最近保存的数据表,请将Revert消息发送到数据表。恢复前会询问是否保存当前数据表。
打开的数据表计数
NTable()可返回打开的数据表的个数
为什么有些命令需要发送到对象,而有些是直接使用?
New Table 和 Open 命令用于创建不存在的对象。创建后,这些对象就知道如何处理,因此您可向其发送消息,请求更改。要关闭此类对象,必须对其容器使用一个命令,因为对象不能删除自身。Close 就是这样一个命令。
访问数据表的值
当前数据表
使用current data table(name)使该数据表成为当前数据表。
当前行
当前行由row()的伪变量的值确定,可以给row()赋值,也可以使用迭代命令for each row()
选定列
获取选定列的列表
选择行
选择某些行,使用select rows
按列名设定或获取值
设定列名当前行的单元格,请使用赋值语句
如果要获取值,只需指定名称,
如果设定列的特定行,而不是当前行,请使用行号用作下标。
混淆警告!请注意,下标必须是表中存在的行。默认行号为 0,因此像 :name 这样引用行 0 的语言将产生无效行号的错误。
实例
表行迭代
什么是当前行?
默认情况下,当前行号为 0。表中的第一行为行 1,因此行 0 实际上存在
row():运算符获取或设定当前行号。
有多少行和多少列
Nrow和Ncol运算符用于统计数据表中的行数和列数。
数据表消息 详细介绍可发送到数据表的消息
命名、保存和打印
set name 可用于指定表名称,或将其更改为一个新名称
可以检索名称
也可将文件名作为参数指定给save函数
打印数据表
日志和布局
目前不需要了解
创建列和删除列
新建列
现有数据表添加新列,请将NEW column消息发送到数据表引用。
使用弹出式的菜单中添加多列,add multiple columns(前缀名,列数,插入位置,数据类型)
删除列
使用Delete columns指定要删除的列。删除多列请将列列为多个参数或列表
列重新排序
For each row
要在当前数据表的每一行迭代一个脚本。
dif和lag
Lag 返回一个列在当前行之前的 n 行的值
Dif 返回当前行中的值与前面 n 行的值之间的差
比较两个数据表(实例)
详见学习脚本
Summarize
该命令主要收集数据表的汇总统计量并将其存储在全局变量中,而summary则是收集汇总统计量并将其显示在新数据表中
by,分组依据,制定分组列。其计算结果在使用By子句时总是矩阵,在没有使用By子句时总是标量。
count,计数,不需要列参数,但通常用于指定一个列来统计非缺失值个数。
sum,求和,指定列名称
mean,均值,指定列名称
min,最小值
max,最大值
stddev,标准差
quantile,分位数,也可以指定参数,用于指定分位数,如0.1表示第10个百分位数。
注意:排除行已从summarize计算中排除
处理元数据
定义:元数据包括数据源、有关每个变量的注释以及用于处理数据的脚本、列分析角色等信息
表变量
用于存储单个文本字符串值,如“大班”中的注释
get table variable获取表变量
set table variable设置表变量
性质/脚本
性质与表变量类似,主要用于存储表达式,如JSL脚本。
例如要执行分析并使用报表弹出式菜单中的将脚本保存至数据表命令,会将分析平台指定的脚本保存在数据表中。
对JSL具有new table property、set property、get property消息
删除变量、性质/公式
假设有数据表dt或列col,其中性质或变量为name,则下列命令删除它们
on open性质
打开数据表时,将自动执行存储为数据表性质的 On Open 脚本
作为预防措施,在打开从其他人处收到的数据表时,应考虑抑制自动执行:
启动时启动的脚本
每次启动JMP都运行一个脚本,命名为JMPstart.jsl,放置到可执行文件夹的Builtin scripts子文件夹中
脚本
假设需要文本表示的数据表,可能是要通过电子邮件发送给同事或用作部分脚本,则可以使用get script获得将在数据表中重新构建信息的脚本
控制公式求值
消息suppress formula eval接受布尔型参数,以指定是否抑制公式求值。
如果运行时脚本依赖于具有值的列,要强制求值单个列,请将 EvalFormula 命令发送到该列
dt<<Run Formulas 执行所有未进行的公式求值,包括未进行的求值或由于对其它公式求值而产生的求值
不使用公式设定值
col<<Set Each Value(expression) 会计算数据表每一行的表达式,并将结果赋给该列。它不会将表达式存储为公式。
控制显示更新
任何时候更改数据表中的值,系统都会发送消息到显示位置,以保持更新。但是,在脚本中进行很多更改时,将增加更新时间。
请在更改之前使用 Begin Data Update 来阻止显示这些更新消息, 并在完成更改后使用 End Data Update 来发布消息并更新显示位置
调整数据表大小
dt << Maximize Display 强制数据表重新测量所有列并缩放为大小最佳的窗口。
在矩阵和数据表之间转换
get as matrix将根据数据表中的所有数值列的值创建矩阵A
as table(matrix)命令可用于根据矩阵参数创建一个新的数据表,这些列命名为col1、col2等
Get All Columns As Matrix 以矩阵方式返回数据表中所有列的值。字符列将根据水平进行编号,起始值为 1。
set matrix创建一个数据表,从而创建存储矩阵值时需要的新行和新列。新列命名为col1,col2等
行菜单中的命令: 本部分讲解处理数据表中行的消息
行消息指向数据表引用,大部分只对当前选定行起作用。 许多行消息通常在脚本中都没有用处,除非要编写模拟JMP交互使用的脚本。
添加行
使用add rows消息指定行数,以及在哪一行后面插入
使用Add rows的变异版本指定可生成赋值列表的参数。赋值可用逗号或分号分隔
可以发送多个参数生成多个列表,甚至是包括多个列表的列表
删除行
要删除行,请发送delete rows消息并制定要删除的行,删除多行则提供一个列表或矩阵作为参数。没有参数时,将删除当前选定行,既没有参数有没有选定行,则delete rows将不会执行任何操作
删除任何数据表底部x行的常用方法
选择行
select all rows选择数据表中的所有行。
Invert Row Selection,反转每一行的选择状态
go to row选择某一行
选择当前排除/隐藏/标记行
选择非排除/隐藏/标记的行,请将选择消息和反转选择消息堆叠在同一个语句中
根据数据值选择行,请使用select where,在圆括号中指定逻辑检验,可使用计算器中常用函数和运算符
select rows命令,根据行号选择数据表中的特定行,参数为行号列表
随机选择,按照一定比例随机选择
子主题
Select Matching Cells选择当前选定列的选定行的值相匹配的行
移动行
将当前选定行移动到指定目标点
查找行
返回行号矩阵
将颜色和标记赋给行
colors和markers消息可以设定或更改用于行的颜色和标记的值
与其他行消息一样,可选择和其他消息堆叠在一起
color by column(:name)/marker by column(:name)根据指定的列值设定颜色和标记
切换行状态
隐藏
排除或标记
注:消息是可以切换的,再次发送消息就是撤销隐藏、撤销排除等。
定位选定行
Next Selected 和 Previous Selected 会上下滚动数据表窗口,以便让尚不在视图中的下一选定行移入视图
清除选择
clear select 取消选择,即不选定任何行
处理行状态
行状态是一种特殊类型的数据。
表菜单中的命令:
本部分的消息主要提供了多种重新排列数据表和制作新表的方法,如果没有为这些消息提供参数,则会生成用于交互的常用对话框。
sort 根据一个或多个列的值重新排列表行,并用结果替换当前表或新建一个表
transpose 通过转置数据表新建数据表,即将行转换为列,将列转换为行 注:没有指定行,使用选定行,没有选定行,则使用所有行。
不指定参数,则打开对话框
summary根据选择的分组列新建有关汇总统计量的表
注意:summary和summarize不同,新建表列和存储在全局变量中
stack 堆叠,将几列合并到一列的几个行中
split 拆分 将一个列分为多个列,首先将几个行映射为其他列的单个行
值得注意:拆分并非常规意义上的理解,把一列拆分为两列,对齐。 其理解为按照拆分依据作为列名称,唯一标示行的列作为行标识,建立一个表格,将要拆分的列填入其中。不指定标示行,则按照顺序排列,即常规意义上的理解。
subset 根据指定的行新建一个数据表,即新建子集。 如果没有指定行,则使用选定行,如果没有使用选定行,则使用所有行
可提前更改对应的行状态
join 水平合并,即连接操作
可以使用笛卡尔联结,即对两个记录进行组合,假设第一个table有N个记录,第二个table有m个记录,则生成m*n个记录
concatenate垂直连接,即拼接
处理列
本部分讲解设定、创建和修改列的各种方法
获取列名
column name(n)返回第N列的名称
注意:返回值为名称值,不是带引号的字符串。 这意味着可以在脚本中通常使用实际名称的任何位置使用它
使该名称称为文本字符串,只需使用char将其括起来
get column names检索数据表中的所有列的名称的列表
获取选定列
移动列
数据列对象
与发送数据表消息到数据表引用一样,也可以发送列消息到数据列对象引用
column函数会返回数据列引用。其参数是用引号+名称/计算结果为名称的内容
非冒号
使用show properties了解可发送到数据列对象的消息
通过列引用访问单元值
在列引用中使用下标来访问单元格中的值。通常使用空下标来引用当前行
发送消息到列
和发送消息到数据表类似,声明对象、双角运算符<<,然后是消息,其中将参数括在圆括号中。或使用send函数。
可堆叠或列出消息
设定和获取属性
可以使用与数据表列对应的消息控制列的各种属性或特征,包括其名称、数据和元数据。
例如hide、exclude、lable和sroll lock可以通过脚本激活,1代表打开列属性,0表示关闭。
代表滚动锁定,即锁定该列始终显示在第一列的位置
要撤销列选择,请将clear column selection消息提交给数据表
名称
set name 可以命名或重命名列,get name用于返回列名
值
set values用于设定列的值,如果变量为字符,则参数应为列表。如果为数值,则为矩阵(向量)。get values以列表或矩阵形式返回值,get as matrix只是同义词。
值标签
值标签提供一种显示缩写数据的描述性标签方法
第一种,使用两个列表
第二种,使用对列表
第三种,使用赋值列表
最后通过use value lables作为消息发送到列的方式激活值标签
数据和建模类型
可以用JSL设定或获取列的数据类型。选项包括character、numeric和row state
可以设定或获取列的建模类型,选项有coninuous、nominal,ordinal等
更改列的数据类型,指定其格式
显示格式
format消息控制数值和日期/时间格式。 第一个参数是来自“列信息”对话框中的格式选项列表的一个带引号的字符串。后续参数取决于选择的格式
获取行的当前格式,请提交get format消息
预选择角色
可以预选择角色。选项包括none、x、y、weight和freq。get role返回当前设置
公式
可以设定、获取和计算列公式
注意:确保添加命令对公式求值,以便将这些列的值用于脚本。
要强制求值单个列,可将eval formula命令发送到该列。甚至用于创建列命令中、formula子句之后,也可实线此操作。
实际上,最好等添加完一组公式,然后使用run formulas命令按相应顺序对所有公式求值。
对比,run formulas命令比eval formula更为可取,因为对公式求值,eval formula不会抑制后台任务的再次求值。而run formulas只是在所有公式都完成求值后才调用此任务。即run formula可以避免后台的二次求值。
范围检查和列表检查
列表检查和范围检查属性可以使用JSL处理。
列表检查:list check
范围以外的值将会被指定为缺失值
提交空的列表检查将清除列表检查状态
范围检查range check需要固定语法指定范围
注:LXLX操作符前均可加NOT,L为less缩写,e为equal,T为无等号
指定年龄列>=12
要检索赋给列的列表检查或范围检查,将get list check或get range check消息发送到该列
请注意,也可以使用 Set Property、Get Property 和 Delete Property 来设定、检索 和移除列表检查和范围检查。即设置列属性
设定、检索和移除列属性

数据列中有大量的可选元数据属性,这些属性可使用get property、set property/delete property消息设定、查询或清除
涉及的属性的名称始终是 Set Property 的第一个参数,而第二个参数取决于要设定的性质。Get Property 和 Delete Property 始终采用单个参数,即性质名称。Get Property 返回性质设置,而 Delete Property 则完全从列中移除性质。
如果要设定多个性质,则需要发送多个单独的 Set Property 消息。如果需要,可以在单个JSL 语句中堆叠多个消息发送。
要获取性质值,请发送 Get Property 消息,其参数是需要的性质的名称
锁定
要锁定和撤销锁定列,使用lock或set lock及布尔型参数,get lock返回当前设置
锁定列,使其值无法被更改
脚本
get script返回一个用于创建列的脚本
行状态运算符
行状态是数据表中的所有行都有的六个属性的集合
行状态实现的功能
如何进行行状态赋值
1、手动--
2、数值方法:使用计算结果为行状态数值的表达式设定行状态。
行状态工作原理
大部分行状态(排除、隐藏、标记、选择)都为布尔值,即它们为开或关,也就是1或0.标记包括0~15,颜色选项为0~84,其中0~15为基本颜色,16~31为相同颜色的灰暗,32~47用于加亮,48~63用于更灰暗,64~79用于高亮,而80~84用于灰色。
行状态列与生效行状态
行状态列既不是数值,也不是字符,只是行状态。且只是存储行状态信息,并未使信息生效
行状态运算符概览
在JSL中,可以使用Row state运算符直接获取或设定行状态。row state(n)可以获取或设定第n行的状态。如果没有参数,则设定或获取当前行。
设定某行的当前状态,请在赋值左侧使用row state()
要将几个(而不是所有)当前行状态复制到行状态列,请使用如下脚本
其中color of为返回对应行状态的值
特征组合
通过combine states合并多项状态设置,其最终行状态为特征累积。
获取一行的行状态
行状态列也可以有多个特征行状态作为其值
一些运算符会设定一个特征,但消除其他特征
color state设置颜色行状态
combine states 合并特征
excluded state 排除行状态,
hidden state 隐藏行状态
hue state 返回色调状态部分设置为指定值的行状态值。需要和shade state结合使用才能显示有效颜色
shade state返回色彩明暗状态部分设置为指定值的行状态值,需和hue state配合使用
labeled state 标签行状态,数据行的标签
marker state 标记行状态,例如点变成×
selected state 选定行状态
其他运算符一次设定或获取一个特征
一个行状态不知道一个特征,而是许多特征。
color of返回指定行状态的颜色分量,若为L值,则会更改当前数据表当前行的颜色
还包括excluded、hidden、labeled、marker of、selected
获取行状态
将行状态表达式置于赋值右侧
只访问行状态的某个部分
设定行状态
访问行状态,将行状态表达式置于赋值左侧(L值)
设定行状态
设定行状态组合
使用combine states可将各种状态的设置集中在一起
创建行状态列
在列中直接创建行状态
使列中的行状态生效
每个行状态运算符的详细信息
排除、隐藏、标记和选择
本部分讲述布尔状态,即开关条件
excluded、hidden、labeled和selected设定已选定指标
其参数为row state()
excluded state、hidden state、labeled state和selected state进行相反操作 根据参数获取行状态值或将行状态条件设定为真或假。
上述命令是将当前行状态替换为排除或隐藏等,会丢失此前的行状态
颜色和标记
color of 返回或设定颜色指标
marker of返回或设定标记指标
Color State 和 Marker State 与 Color Of 和 Marker Of 类似,但是方向相反。其中 -Of函数将实际状态转换为指标,而 -State 函数将指标转换为状态。
如果使用RGB值,则每个颜色都应该有一个列表,按照红绿蓝顺序的百分比。
色调与暗度
hue state和shade state一起是用于挑选颜色的color state的备选方案
Hue 和 Shade 没有“-Of”运算符。Color Of 返回颜色行状态的等效 Color State 指 标,其中状态已使用 Hue State 和/或 Shade State 设定。
As Row State 运算符通过内部数值代码进行行状态赋值,此运算符只是将整数 转换为其等效的行状态
可以使用 Set Row States 命令提交一次性进行行状态赋值的代码矩阵
计算
本部分讲解用于预计算的列统计量和行统计量的函数,并演示JSL表达式如何在JMP公式计算器中进行幕后工作
预计算的统计量
JMP具有col maximum、col mean、col minimum、col N missing、col number、col quantile,CV(变异系数)、col standardize、col std dev、col sum、maximum、mean、minimum、Nmissing、number、std dev和sum函数,这些都是预计算函数
值得注意,预计算的函数会忽略已排除的行状态,因此计算将包括任何已排除的行。遵循行排除的汇总统计量,可以使用分布平台。
列函数
名称以col名称开头的函数都是按列工作,或按指定列中的值向下工作,并返回单个数字。
行函数
列出的没有"col"的函数在指定变量的值间按行工作,并返回列结果。
计算器公式
JMP可以以结构方式编辑公式。通过计算器窗口创建的公式列与通过JSL使用New column(...,formula())或col<<formula()等命令创建的公式之间不存在差异
语法参考
数据表运算符
数据表对象消息
元数据的数据表对象
行命令
用于选择行的数据表消息
用于重新排列数据表的消息
数据表列消息
行状态函数
按列预计算的统计量
按行预计算的统计量
6、平台 创建、重复和修改分析
解释:平台结果位于两层:平台本身,其中包含分析结果且与分析命令对应;演示显示,与各组命令对应。第三个对象是数据表本身,可包含在当前分析中。
例如:1、添加到分析中,如拟合新线,将命令发送至平台 2、扩大图形框,可将某个命令发送到显示。 3、高亮度显示某些数据表中行的点,可将某个行状态命令发送到数据表
本章使用的表示方法,大写显示需要按照原样使用的命令字的名称,并以小写显示作为实际选项占位符的参数。
以交互方式启动平台与获得等效脚本
即启动平台,保存脚本。其中菜单选项命令总是以布尔选项出现
平台脚本语法
所有平台脚本开头处都是用于调用平台的命令,此处为oneway,在oneway命令内是两种参数,启动时需要的Y和X列角色列表等参数,而quantiles(1)等选项则在启动平台后发送到平台
大部分选项都是带或不带选定标记的开/关选项。带或不带选定标记的等效脚本是布尔参数1 或 0。 其它命令将导致弹出各种对话框,在其中您可以指定值或进行选择。在脚本中,此类规格将在圆括号内指定并以逗号分隔,且顺序通常与在对话框中的显示顺序一样(自上向下,从左到右)。
发送脚本命令到正在运行的分析
启动平台后需要使用另一种语法来发送消息,以控制正在运行的平台,方法是send或等效运算符<<
首先需要一种对象寻址方法
第一种,最简单的是从脚本启动平台,脚本会将对象引用赋给全局变量
第二种,通过使用下标引用平台名称的方式进行赋值,此方法适用于已启动的平台。
命令和参数惯例
1、可以忽略布尔选项的参数以切换状态
2、如果菜单提供了几个逗号或斜线分隔的选项,如means/anova/T test,可以使用任何一个命令。如果几个命令具有相同的别名,第一个命令优先于脚本语言。
3、如果对显示进行了更改,如调整图形大小,则不会反应在保存的脚本中,保存脚本只记录与分析相关相关的选项,不记录演示详细信息。
4、如果子菜单项表示命令,而不是设置,则对应的脚本为没有父项的菜单项本身。例如单因子分析具有菜单项非参数,在子菜单中具有三个命令,包括Wilcoxon检验,在脚本中将只使用子项名称
5、如果子菜单项是设置的值,而不是独立命令,则在脚本中提供父项,且子菜单选项作为其参数。
6、从平台返回的脚本通常和自己编写脚本看起来不一样。例如可以使用简要脚本启动函数,distribution
发送几则消息
要发送几则消息,可以添加更多的<<运算符或更多的Send参数
因为<<是忽略运算符,它会合并参数,且工作原理与组合参数时不同,可以使用额外的<<符号堆叠多则消息,并按照顺序(从左到右)全部执行。
可以使用分组圆括号,将消息发送到发送消息的结果,此情况下关联分组没有顺序
另一种堆叠消息的方法是发送消息列表
了解对象所响应的消息
1、通过交互界面尝试程序,然后研究保存的脚本。
2、研究平台窗口中的界面,弹出式菜单和情况菜单的菜单项都有名称和参数相同的等效JSL。
3、转至“JMP起始页”窗口中的“索引”选项卡,单击“对象按钮”,找到所需的对象类型,并单击相应列表项。
4、show properties(object ref)在“日志”窗口中列出对象可接收的所有消息
如何解释show properties生成的列表
【子表】指的是放在子菜单中的一组命令。
【布尔值】用于关闭和打开选项,他们的参数通常为1或0.未指定参数,则切换相反状态
【操作】和【新实体】是用于一般用途的命令,通常会导致显示用户界面中的对话框。操作的参数没有特定标准,可以先在界面中尝试项目,然后研究平台保存的脚本。
【操作选择】和【Enums】的参数具有特定的选项集。
启动平台
指定列
如果要使用将为列参数计算的表达式,请将名称置于Eval或evallist函数内
平台启动脚本的列参数也可以是带花括号{ }的列表,因此下列脚本都有效
平台执行命令
将命令Action发送到平台后,它只是计算表达式,不管它是什么。此命令允许连续调用平台。
共计允许四次平台,
不可见报表
平台启动允许使用不可见选项,抑制窗口的显示。在模型拟和脚本中使用此选项将抑制模型对话框和结果窗口。
该实例出现报错...原因未知
invisible选项也会适用于“表”菜单操作,抑制窗口创建(不仅仅是隐藏)。但是第一次使用数据表后,在关闭使用它的分析时,它会自动删除自己。
标题
在启动请求中添加title命令,可以指定标题。
by组列
在大多数平台中,可以跨一个或多个by列定义的行子组重复运行平台。
如何使用By组启动平台,并从各个组提取结果
其中J(NR,NC,VALUE),创建相同元素的矩阵
平台报表的引用从显示框>>报表子标题>>行数
where子句与保存有关By组的脚本
根据By组保存脚本时,将添加where子句,显示使用哪个组。
针对整个分析窗口的脚本,这些脚本会连接在一起
如果提交此脚本,将重新生成与By组脚本一样的分析,只是各个组的结果将显示在独立窗口中。可以使用new window和Vlist box将结果粘合在一起
where子句适用于所有支持By组处理的平台,任何JSL表达式都可成为其参数
分析对象内的对象
一些平台具有子结构,它们内部还有对象,这些对象可通过内部Send运算符寻址。
用于平台窗口的通用命令
save script命令几乎适用于所有平台
report命令可以访问显示曲面,控制外观信息。
首先获得显示框树引用,使用下标定位至外框,然后向其发送close消息
特定平台脚本
本部分讲解适用于各个JMP平台的脚本惯例,其中按分析和图形菜单的显示顺序。可以根据侧重点交互使用下列术语:命令、选项、消息
by
几乎所有平台均支持By 参数
标题
在所有平台中都可以使用Title命令,它会替换标题
轴
许多平台都提及在平台内可向轴发送消息,数值轴
试验设计
暂不需要
Distribution
distribution有两层对象,Continuous ditribution和Nominal distribution对象。
启动方式
第一种,基本启动,对许多变量应用相同的选项
第二种,详细启动,每个列都可以使用不同的选项分析
启动平台将返回 Distribution Analysis 集合的对象引用。Distribution 平台的引用可使用变量编号或变量名称作为下标
用于continuous distribution的选项
quantiles,分位数,布尔型参数
moments,汇总统计量,布尔型参数
more moments 更多的汇总统计量,布尔型参数
horizontal layout 水平布局,布尔型参数
histogram 显示直方图,布尔型参数
std error bars 直方图选项,显示误差条,布尔参数
count axis 直方图选项,显示计数轴,布尔参数
prob axis,直方图选项,显示概率轴,布尔参数
density axis 直方图选项,显示密度轴,布尔参数
show percents 直方图选项,显示百分比,布尔参数
show counts 直方图选项,显示计数,布尔参数
CDF plot 显示CDF图 布尔参数
test mean(数字),均值检验,非布尔参数
均值分布服从正态分布
test std dev(数字),标准差检验,非布尔参数
其标准差分布服从卡方分布
confidence interval(概率),指定置信区间,非布尔参数
主要用于假设检验
prediction interval(置信水平,n个未来的观测) 预测区间 可以使用布尔参数,则打开对话框,或者输入启动参数,直接启动。
其主要原理为基于当前概率密度函数,预测抽样统计量
tolerence interval 容差区间,可以使用布尔参数,则打开对话框。或者输入启动参数,直接启动。
主要原理为:按照指定分布拟合概率密度函数,然后预测抽样统计量
capability analysis(USL(数字),LSL(数字),Target(数字)) 能力分析,输入规格限参数
fit distribution(选项) 拟合指定分布,all拟合所有分布并对比
ppk capability labeling 在能力分析中,切换标签为pp而不是cp 布尔参数
save(选项)保存,在数据表中新建列进行保存
axis settings(轴选项)
存在疑问
histogram color(数字) 直方图颜色
太多了,较为复杂
Fit y by x
以变量X的值为条件分析Y变量的分布
bivariate
拟合的曲线可以通过下标曲线表示法寻址
发送子对象的消息也可以在子命令需要的任何参数之后,以列表的形式直接在启动语句中发送
如果使用group by功能为分组列标识的组生成曲线,则生成的脚本将使用fit where子句定义每条曲线的子集。绘制在同一张图。BY则是绘制为两张图。
拟合函数的选项
show points 显示点,布尔参数
fit mean 拟合均值线 无参数
fit line 拟合直线,无参数
fit polynomial(次数)拟合多项式,参数为幂指数
fit spline(lambda 平滑参数)即灵活拟合
fit each value 拟合每个值,线条经过每一个X对应Y集合的均值
fit special(xtran(none|log|sqrt|square|reciprocal|exp),ytran(变换类型),intercept(截距约束值),slope(斜率约束值),degree(多项式次数,默认为1))
特殊拟合,主要是变换了X/Y变量后进行的拟合。例如将X变量求自然对数
fit orthogonal()正交拟合
univariate variances 一元方差,使用X/Y样本计算方差
equal variances 相等方差
fit x to y 方差比为0,指示y没有误差
specified variance ratio 指定方差比
density ellipse(置信水平),绘制正态概率椭圆
nonpar density()非参数密度,按照密度绘制登等高线。
支持的选项
kernel control,显示核心控制 布尔参数
histogram borders边缘直方图,布尔参数
paired t test 配对的t检验
平台中无该功能,只有JSL才有该功能
各种类型曲线的选项
line of fit 是否显示拟合线 布尔参数
confid curves fit 拟合置信曲线,布尔参数
confid curves indiv 单值置信曲线 布尔参数
line color 拟合线的颜色
line style 拟合线的样式,实线,点线等
line width 拟合线的宽度 参数为数字
save predicteds 保存预测值 布尔参数
save residuals 保存拟合残差 布尔参数
remove fit 移除拟合,布尔参数
oneway
可选的选项
quantiles 显示分位数和箱线图 布尔参数
means/anova 均值/标准差 布尔参数
/指或者,而不是消息的一部分
means and std dev() 显示均值和标准差,布尔参数
t test 显示t检验报表,只能用于两水平
显示选项
XAxis 和 YAxis 消息可用于将 Axis 命令引导到图形。
Contingency
显示分类响应在各组中有何分布差异
选项包括
mosaic plot 显示马赛克图,布尔参数
contingency table 显示列联表 布尔参数
crosstabs 显示列联表 布尔参数
tests 显示校验 布尔参数
correspondence analysis 对应分析 布尔参数
logistic
logistic拟合显示分类响应作为连续变量函数有何分布差异
选项
Inverse Prediction( Alpha(.05), //Alpha 水平 Response( 要逆预测的概率,... ))
matched pairs
分析显示配对变量对在其均值中有何差异
选项包括
fit model
模型拟合对话框
暂不需要-231页
nonlinear fit
非线性拟合,由最小二乘法或定制损失函数拟合具有要估计的参数的公式定义的模型
multivariate
多元分析:显示散点图矩阵
partition
以递归的方式根据Y和x的关系分隔数据,创建决策树
discriminant
判别分析,将多个y值分类为x值的各个分组
选项
PLS
偏最小二乘,用于多个x预测y,尤其x多于行数
neural net
神经网络拟合
选项
hierarchial cluster
层次聚类分析
Get Column Names 命令返回列名,作为字符值列表。进行双因子聚类时,它就很有用,且名称顺序与列聚类时的顺序相同。
k-means cluster
k均值聚类分析,用于大型数据集
time series
构建时间序列图
chart
绘制数值列的数据或绘制统计量
平台选项
用于每个Y的选项
用于每个水平的选项
将消息发送到带下标的Y或Level,设定单个y或单个水平的属性
将消息发送到 X 轴、叠加 Y 轴 或单个 Y 轴。此处, X Axis 指的是公用分类轴(由 所有图单元格共享), Y Axis[i] 指的是第 i 个 Y 的轴,没有下标的 Y Axis 将命令应用于所有 Y 的轴。 ch = Chart(X(年龄), Y(Min(身高), Mean(身高), Max(身高))); ch << (x axis << { axis name("abc"), No Major Tick Mark(0) }); ch << (overlay y axis << show major ticks(0)); ch << (y axis[2] << show major ticks(0));
overlay plot
根据x轴上的共用变量在y轴上叠加几行或几个标记
平台选项
要更改特定轴,请将 Send 运算符用于 Left Axis 或 Right Axis。要更改特定变量的选 项,请将 Send 运算符用于 Y 列的名称。
spining plot
三维散点图
contour plot
等高线图
选项
语法参考
7、显示:创建与定位结果
本章讲解: 1 进行图形编程以在 JMP 图形中绘制各种元素及创建新类型的图形, 2 定位显示以处理报表窗口中的各个项目,以及 3 创建显示树以构建具有自定义结果或标准结果自定义组合的新窗口。
图形编程
在图形中的定制添加脚本
实例
在图形中添加图例
使用row legend命令以交互方式添加图例
从头新建图形
图形脚本在new window命令中的gragh box命令中设置
窗口名称后面有两个可选关键字。Editable 将窗口视为“日志”窗口(因此可在其上拖 放报表项)。Dialog 将窗口视为对话框窗口。
new window( "平滑随机游动", graph box( framesize(200,200), xscale(-20,20), yscale(-20,20), x=0; y=0; xi =0; yi=0; for( i=0,i<2000,i++, xi=0.9*xi+random normal()/10; yi=0.9*yi+random normal()/10; xx = x+xi; yy = y+yi; xx=if( xx<-20,-20,xx>20,20,xx ); yy=if( yy<-20,-20,yy>20,20,yy); line({x,y},{xx,yy}); x=xx; y=yy ) ) );
图形元素
标绘函数
YFunction运算符用于绘制平滑函数,YFunction(Sine(x),x)
new window( "正弦函数", graph box(framesize(200,200), xscale(-10,10), yscale(-1,1), xname("x"), yname("y"), for(i=1,i<4,i+=.1,yfunction(sin(x)+i*.1,x)) ) );
contour function是一个在二维空间中表示三维函数的类似方法,最后一个参数指定等高线的值,它可以是一个值,使用::所划定的值的范围,或值矩阵。
new window( "正弦函数", graph box(framesize(200,200), xscale(-10,10), yscale(-10,10), pen color("black"); pen size(2); contourfunction(sin(x)+cos(y),x,y,(0::20)/5); ) );
normal contour绘制对于k总体和两个变量的正态概率登高线
normal contour是用于实现二元密度椭圆等效应的广义方法
梯度函数
gradient function,用两种颜色的渐变色填充图形
ZColor 值必须为数值代码,而不是名称。您可以使用颜色菜单指标(0=black, 1=grey, 2=white, 3=red, 4=green, 5=blue 等),
获取图形框的性质
hsize 返回图形框的水平大小,像素为单位
函数,则意味着可以单独使用,一般用于graph box函数内部
vsize 返回图形框的垂直大小,像素为单位
xorigin 返回显示框左边到右边之间的距离
XOrigin()+XRange() 是右边。
xrange 返回图形框左边的x值
yorigin 返回显示框底边的y值
yrange 返回显示框底边至顶边之间的距离
绘制线条、箭头、点和形状
line函数在点和点之间绘制线条
语句等效
,五角星实例也可以使用此方法绘制。请注意,由于条目是表达式,因此必须使用完 整的 Matrix({⋯}) 表示法,而不能使用 [ ] 缩写形式。 new window("五角星", graph box(framesize(300, 300), xscale(-1.1, 1.1), yscale(-1.1, 1.1), line( matrix({ // x 坐标 cos(1*pi()/10), cos(9*pi()/10), cos(17*pi()/10), cos(5*pi()/10), cos(13*pi()/10), cos(1*pi()/10)}), matrix({ // y 坐标 sin(1*pi()/10), sin(9*pi()/10), sin(17*pi()/10), sin(5*pi()/10), sin(13*pi()/10), sin(1*pi()/10)}))));
arrow 函数在第一个点和第二个点之间绘制箭头,arrow({x,y},{x2,y2})或者arrow([x1,x2,x3],[y1,y2,y3])
marker(<rs>,{x1,y1},{x2,y2}....)在指定的坐标位置绘制标记,rs则为标记的形状参数,注坐标应为列表。同时markersize可以修改标记的大小
pie绘制饼图扇区,pie(left,top,right,bottom,startangle,endangle)
fill color用于绘制填充区域的颜色
arc 绘制椭圆弧 arc(left,top,right,bottom,startangle,endangle)
circle使用指定的中心点和半径绘制圆,后续参数指定其他半径
rect根据指定的对角线坐标绘制矩形,指定四个参数坐标{左,上,右,下}或一对列表({left,top},{right,bottom})第五个参数为fill,指定1或0,例如rect(1,1,1,1,1)
任何负的 fill 参数都将产生按单个像素嵌入的未填充框
oval 在由x1,y1,x2,y2参数指定的矩形中绘制椭圆,第五个参数为fill ,如上,指定1或0
Hline 在指定的y值出跨图形绘制水平线 Vline在指定的x处沿图形向下的方向绘制垂直线
Y参数支持使用值矩阵的方式绘制多条线条
其中color和marker为颜色和标记区分是否开启,其参数为布尔参数,默认开启
polygon为连接各个点,最终返回第一个点,从而闭合多边形,并填充生成的区域
in polygon用于说明给定点是否在指定的多边形中
mousetrap,当在图形中按下鼠标,并且鼠标未被其他图形对象操控时,将重复计算dragscript表达式。运行脚本前,先将全局变量x/y设置为鼠标值,之后再回复初始值,释放鼠标后,随机运行mouseupscript表达式
contour使用坐标网格绘制等高线,给定用 xVector 的 n 个值和 yVector 的 m 个值生成某个曲面上的值的 n x m 矩阵zGridMatrix,此函数用 zColors 定义的颜色绘制由 zContour 中的值定义的等高线
-10::10生成了-10~10,共计21个元素的矩阵
添加文本
使用text可在指定位置绘制文本,
您可以在点和文本前面放置可选的第一个参数,即 Center Justified、Right Justified、Erased、 Boxed、Counterclockwise 或 Clockwise。Erased 用于擦除将使图形中的文本模糊的任何 内容,它会在文本后面涂上具有背景颜色的矩形。在下面的实例中,请注意已擦除文本在 绿色 Rect 上的白框中的显示方式。其它效应不释自明。
颜色
填充颜色对于绘制的形状用10种颜色,在某些绘制程序中,并不能全都获取。颜色可以通过单个数值参数、带引号的颜色名称或RGB值进行选择。标准颜色可通过数字0-15或其名称进行选择。 
控制颜色的命令有5个
fill color设定实区域的颜色
pen color用于线条和点
level color 返回类别颜色
back color用于设定文本背景,与擦除文本周围的框类似
<<background color用于设定图形的背景颜色
font color用于添加的文本
生成取色器
pick color 颜色选取器
如果使用RGB值,请按红色、绿色、蓝色顺序键入一个有关各种颜色的百分比的列表。
透明度
在图形环境中,如frame box,请使用transparency函数设定透明度水平。参数alpha可以是0~1之间的任何数字。0表示清晰透明,1表示完全不透明。
new window( "rect", graph box( framesize(200,200), pen color("gray"); fill color("gray"); transparency(0.25); rect(0,40,60,0,1); pen color("red"); fill color("red"); transparency(0.5); rect(10,60,70,10,1); pen color("green"); fill color("green"); transparency(0.5); rect(50,90,90,50,1); pen color("blue"); fill color("blue"); transparency(1); rect(0,80,70,70,1) ); );
填充模式
fill pattern函数现已过时,没有效果。
线条样式
可以通过数字0~4或名称(Solid、Dotted、Dashed、DashDot、DashDotDot)控制线条样式,line style(参数);
线条粗细则使用pen size并以像素指定线宽。注意:对于打印,pen size视为默认线宽的倍数。
使用像素控制
首先按图形坐标设定 Pixel Origin,然后以相对于该原 点的像素坐标使用 Pixel Move To 或 Pixel Line To 命令。Pixel 命令主要用于绘制不随 图形的大小或尺度变化的自定义标记。您可以将标记存储在脚本中,然后在任何图形内进行调用
交互图形
handle和mousetrap函数用于制作响应单击和拖动的交互图形。另一种方法就是使用button box、slider box或global box在图形外面放置按钮或滑块控件。
handle,建立响应拖动的交互图形。
mu =0; sigma = 1; rsqrt2pi = 1/sqrt(2*pi()); new window( "正态密度", graph box( framesize(500,300), xscale(-3,3), yscale(0,1), double buffer, yfunction(normal density((x-mu)/sigma/sigma),x); handle(mu,rsqrt2pi/sigma,mu=x,sigma=rsqrt2pi/y); text({1,.7},"mu ",mu,"sigma",sigma); ); ); 理解:其主要为拖动handle所标识点的坐标可以重新赋给函数的参数,以重新运行图形函数
如果使用句柄坐标的某个函数,应调整handle的参数。否则句柄将逃离鼠标
或者使用round函数约束handle放置出现不正确的指数,例如5的2.5次方
a=5; b=5; New Window("幂", Graph Box(FrameSize(200,200),XScale(-10,10),yScale(-10,10),Double Buffer, for(i=0,i<1.5,i+=.2, pen color(1+10*i); text color(1+10*i); YFunction(i*x^round(a),x); Handle(a,b,a=x;b=y); h=9-10*i; text({-9,h},b,"*i*x^",round(a),", i=",i))));
一个图形可以使用多个句柄
amplitude = 1; freq = 1; phase = 0; NewWindow("正弦波", Graph Box(FrameSize(500,300),XScale(-5,5),yScale(-5,5),Double Buffer, YFunction(amplitude*sine(x/freq+phase),x); Handle(freq,amplitude,freq=x;amplitude=y); Handle(phase,.5,phase=x); text({1,.7},"振幅 ",amplitude," 频率 ",freq, " 相 ",phase)));
建立响应鼠标单击的交互图形
当在图形中按下鼠标,并且鼠标未被其他图形对象操控时,将重复计算 dragScript 表达式。运行脚本之前,先将全局变量 x 和 y 设置为鼠标值,之后再将其恢复为原始值。释放鼠标按钮后随即运行mouseUpScript 表达式。
注意,前后的drag和mouseup分别表示单击按下和释放对应的脚本,这一点值得注意
x0 = 0; y0 = 0; z0 = 0; New Window( "在平面中查看 3D 函数", Graph Box( FrameSize( 300, 300 ), X Scale( -5, 5 ), Y Scale( -5, 5 ), DoubleBuffer, Contour Function( Exp( -(x - x0) ^ 2 ) * Exp( -(y - y0) ^ 2 ) * (x - x0), x, y, z0 / 10 ); Handle( -4.5, z0, z0 = Round( y * 10 ) / 10 ); // 从句柄获取 z 截取值 V Line( -4.5 ); Text Size( 9 ); Text( Counterclockwise, {-4.6, -3.5}, "拖动以设定用于等高线截取的 z 值:z=", z0 / 10 ); Marker Size( 2 ); Marker( 2, {x0, y0} ); Mousetrap( x0 = x; y0 = y; ); //将原点设定为单击点 Text( {-3, -4.9}, "单击任何位置以设定函数的中心点。" ); ) );
采集图形的坐标点
dt = new Table("dat1"); Current Data Table(dt); NewColumn("XX",Numeric); NewColumn("YY",Numeric); x=0; y=0; add point = expr( dt<<addRows(1); row()=nrow(); :xx = x; :yy = y); NewWindow("添加点", Graph Box(FrameSize(500,300),XScale(-5,5),yScale(-5,5), for each row(marker({xx,yy})); MouseTrap({},add point)));
有5个drag函数执行与handle和mousetrap类似的函数,但一次有多个点。 1、drag marker绘制n个标记 2、drag line 使用n个顶点和n-1条线段绘制一条连接线 3、drag rect使用前两个坐标绘制一个填充的矩形,其中忽略任何其他坐标 4、drag polygon使用n个顶点绘制一个填充的多边形 5、drag text在坐标处绘制一个文本项,如果是文本项列表,则在第i个(x,y)坐标绘制第i个列表项,如列表项少于坐标对,剩下的点将重复最后一项。
Drag 运算符是用于显示用户可调整的数据并随后捕获调整的值的方法
::i=1; storepoints=expr( mydt= new Table("My coordinates_"||char(i)); i++; NewColumn("GCoordX",Numeric); NewColumn("GCoordY",Numeric); mydt<<add rows(nrow(GcoordX)); :GCoordX<<values(::GcoordX); :GCoordY<<values(::GcoordY)); ::GcoordX=[3, 0, 4, 11, 17, 17, 7, 5, 10, 17, 17, 14, 12, 12, 15, 18, 22, 26, 29, 30, 30, 28, 25, 25, 29, 32, 34, 40, 38, 33, 25, 25, 33, 39, 43, 46, 47, 39, 35, 31, 25, 20, 13, 4, 3]; ::GcoordY=[0, 0, 10, 10, 17, 29, 23, 31, 35, 38, 48, 52, 55, 61, 65, 67, 68, 67, 64, 60, 54, 51, 48, 39, 41, 44, 48, 46, 40, 34, 30, 22, 23, 21, 19, 20, 18, 11, 15, 16, 14, 7, 2, 2, 0]; new window("重新绘制 JMP 人! ", vlistbox( graph box(framesize(300,300), xscale(-10,60),yscale(-10,80), fill color("cyan"); dragPolygon(GcoordX, GCoordY); pen color("gray"); dragMarker(GcoordX, GCoordY)), buttonbox("将当前顶点存储在新数据表中",storepoints)));
故障排除:交互图形没有按照预期方式工作,请确保handle或mousetrap坐标提供了初始值
picture显示类型。JSL中的picture数据类型用于存储JMP输出或公式的图片,
创建图片数据,请发送get picture消息到displaybox。
函数 Expr As Picture 会计算其参数并创建表达式的图片,其中使用与 JMP 公式编辑器相同的格式机制
如果将文字表达式作为参数,请记住将其包括在 Expr() 内,从而 JMP 只 接受结果图片,而不计算表达式。
有了图片,就可以用两种方式使用它 1、使用displaybox构造函数,将其合并到新显示树 2、使用save picture将其写入文件。
picture<<Save Picture("路径", type) 其中 type 可以是 WMF(Windows)、EMF(Windows)、PICT(Macintosh)、BMP(Windows)、JPEG、 JPG 或 PNG。
使用 << 运算符,就可以将消息发送到正在构造的显示,无需在它们出现后再作为消息发送。这让您可以区分计算子参数和选项参数。它还有助于使得哪个参数是选项,而哪个是要在图形中运行的脚本变得更清晰。
语法参考
用于在图形框中控制设置的参数
构造交互图形框的函数
在图形框内标绘函数的函数
用于在图形框内以像素坐标为单位进行绘制的函数
处理显示
JMP报表是通过嵌套和粘合各种矩形框,以层次方式构建的。要使用脚本处理报表,首先需要了解有关这些框的工作原理方面的知识。 1、需要从现有报表处理显示框,该部分首先介绍JMP报表,然后讲解如何在报表中定位、如何从报表中提取数据以及如何利用JSL更改报表。 2、需要构造自己的报表。
显示框简介
Vlistbox以垂直方式将各个框粘合在一起
Hlistbox以水平方式将各个框粘合在一起
将Vlistbox和Hlistbox嵌套在一起
tablebox是特殊的Hlistbox,其元素是字符串和数字列
outlinebox创建外框层次结构
picturebox将轴、框和标签粘合在一起,制作图形
JSL还有一些用于自定义显示的其它显示框类型:buttonbox、slider box、tab box和global box,此外还有支持可编辑文本框text edit box和用于制作与因果图平台中类似的树的框hier box
显示框对象引用
名为显示框引用的特殊JSL值可拥有或引用显示框(本书将db作为任何显示框的占位符),dt为数据表,obj为可脚本化的对象
可以使用report消息创建显示框引用,以方便与可脚本化平台关联的显示树顶部
要获得对二元分析报表的引用,可以使用: biv = bivariate(x(身高),y(体重),fit mean, fit polynomial(4)); rbiv = biv<<report;
下标
如果要引用报表的另一个部分,最简便的方法就是使用下标运算符来找到它。它的工作原理都是搜索完整的字符串,文本参数也可以是任何计算结果为字符串的表达式。
注意:对外框进行编号时,外框是否关闭并不重要。但是关闭的if框的确会让树的各个部分完全消失。
通常需要将报表的某部分赋给某个变量,从而方便的向其发送消息
如果要标识嵌套在某个节点下面几层的项目,请在任意上述类型的多个参数中使用下标。找到第一项后, JMP 将在该项目内 查找下一项,依此类推。
请注意,可以将各种类型的下标连在一起。这将选择节点“多项式拟合次数 = 4”下的外框节点“参数估计”的第一个表的第 3 列。
通配符
在column函数中,可以使用通配符“?”表示要和任何字符序列匹配的搜索字符串中的位置。
对于编写用于处理随分析列而变化的标题的通用脚本,这将是一个重要的方法。例如, 可以使用下列脚本将“分布”报表的顶部与任何列匹配。 Distribution(YColumn( “他?” )));
发送消息
显示引用可用于通过send或<<运算符将脚本发送到显示元素
close可以在关闭和打开状态之间来回切换外框节点。也可以包含一个布尔参数,表示0/1
了解显示框引用可以理解的消息,可以将show properties用于该对象
快速查找窗口
发送窗口消息,可以查找嵌套在其他窗口下面的窗口
zoom window 缩放窗口,以容纳显示
自定义报表
send to report和dispatch命令可以协同使用,以自定义报表外观。例如打开关闭外框节点、调整图形框大小,或自定义图形框中的颜色。
send to report包含可发送到显示树的命令的列表。
dispatch用于将命令发送到显示树的特定部分。它四个参数,第一个是需要遍历以找到需要的显示树部分的外框节点列表。第二个和第三个参数一起起作用,第二个参数是显示元素的名称,第三个参数是显示元素的类型。第四个参数是要发送的命令
注:如果几个外框节点具有相同的名称,则 JMP 将为其进行下标赋值。例如,如果二元分析具有两个二次拟合(导致标题相同),在调度一个命令到第二个拟合时,下标 [2] 将添加到此复制的标题。 处理 Send to Report 和 Dispatch 命令的最好方式是使用鼠标先运行报表,从而以交互方式创建自定义。然后,检查 JMP 生成的脚本。
平台实例
如何获取表中的单个数字
 您可以使用 For 循环倒计数至需要的项的行。注意到 For 的第二个参数是条 件;只要条件检验为真,循环就将继续。此处的检验是“当 Terms 列中的字符串不是 "(身 高-62.55)^3" 且未达到第 10 行”,因此只要字符串匹配,循环就停止, i 的值是匹配行的 编号。然后将 i 用作要在 Estimates 列获取的下标。
也可以从框中获取值作为矩阵,然后用于进一步的计算和写入数据表。也可以直接创建数据表。
注意,写脚本请打开显示框树形图,可以较好的定位显示框,读出所需数据
调整轴尺度
保存图片
需要选择包含图形的图片框,只选择图形将放弃轴
记录报表日志
rbiv<<journal window
window
window按标题查找窗口并返回对该窗口的引用。
定位报表的语法参考

用于显示框的下标
构造显示树
可以构造函数构造自己的显示并安装在窗口中,本部分将演示如何将各种显示放在一起,如何向其发送消息
基础知识
首先需要启动new window,以标题开头,然后列出要在窗口中构造的项目。所有的显示框构造函数都以“box”结尾
实例
使用 OutlineBox、HListBox 和 Matrix Box 汇编矩阵 JSL 的部分伪表
a = [0 1 2, 3 4 5, 6 7 8]; b = [8 7 6, 5 4 3, 2 1 0]; c = Identity( 3 ); d = J( 3, 3, 0 ); e = 1 :: 4; f = [+ -, - + ]; mcs = New Window( "矩阵伪表", Text Box( "此脚本是对矩阵构造函数的快速引用。" ), Outline Box( "启动矩阵", H List Box( Outline Box( "a", Matrix Box( a ) ), Outline Box( "b", Matrix Box( b ) ) ) ), Outline Box( "构造函数", Outline Box( "c=Identity(3)", Matrix Box( c ) ), Outline Box( "d=J(3,3,0)", Matrix Box( d ) ), Outline Box( "e=1::4", Matrix Box( e ) ), Outline Box( "f=[+ -,- +]", Matrix Box( f ) ), Outline Box( "Diag(a)", Matrix Box( Diag( a ) ) ), Outline Box( "VecDiag(a)", Matrix Box( Vec Diag( a ) ) ), Outline Box( "a||b", Matrix Box( a || b ) ), Outline Box( "a|\b", Matrix Box( a |/ b ) ), Outline Box( "a`", Matrix Box( a` ) ) ) );
可以进行编程来避免迭代outline box
更新现有显示
有时候不知道将来的报告需要显示多少个显示框?
append 该消息在现有显示中添加一个显示框。例如,在脚本中,构造单个空框,然后使用<<Append为分析中的每个变量都在其中添加框。
prepend消息的工作原理与append类似,只是在显示框的开始处添加项目,而不是在结尾处
biv = Bivariate(Y(身高), X(体重), Fit Line); (biv<<report)(Outline Box(1))<<Prepend(Button Box("单击此处可获得曲线", biv<<Fit Polynomial(2))); 附加到树的顶部也可以实现此结果: biv = Bivariate(Y(身高), X(体重), Fit Line); (biv<<report)<<Prepend(Button Box("单击此处可获得曲线", biv<<Fit Polynomial(2)));
使用显示框的delete方法,将使显示框及其所有子项都消失。
这对于与 Append 和 Prepend方法一起用于构建完全动态的显示很有用。在下面的实例中,将一个文本框替换为另一个文本框。在此情况下,脚本应使用 Set Text,但许多文本框都不能更改其内容。 x=New Window ( “X” , list = vListBox( t1 = Text Box( “t1” ), t2 = Text Box( “t2” ))); t1 << Delete; list << Append(t1 = Text Box ( “t1new” ));
sid append消息可以在现有树中添加一个显示元素。显示框或显示段
更新显示框中的数值列,使用set values命令
控制文本换行
通常JMP会对文本框中的文本进行自动换行,可将默认换行点改写为set wrap(n)消息,其中n是要在换行点之前显示的像素数。
也可以使用bullet point(1)使用圆点,此消息发送到文本框将在文本前面放置一个小圆点,并使该文本框中的后续行缩进
交互显示元素
JMP有三种特殊类型的显示框,通常在JMP平台中都看不到:button box、slider box、global box。用于构建具有交互图形的自定义窗口。
slider box绘制一个滑动杆控件,用于挑选指定的全局变量的任何值,其范围由指定min和max确定。移动滑杆时,会将滑动杆当前位置指定的值赋给该全局变量,图形也会相应的更新,因此slider box是另一种用于参数化图形的方法
button box使用指定的名称绘制按钮。单击按钮时,将执行该脚本。
该按钮保持活动状态,在窗口的生命周期内一直可用。有时可能需要将 Button Box 与滑动杆一起使用,如此 处所示,或提供更新图形的选项,以反映不断变化的数据条件。
global box显示JSL全局变量的名称和当前值。通过在窗口中直接编辑值,并按Enter或return提交更改,用户可以将新值赋给该全局变量。
使用全局变量的图形将自动更新为新值。如果指定了表达式,如 Sqrt(4),则全局框先计算它,然后存储并显示结果 2。
实例:将图形和两个滑杆和一个按钮合并一起,
iu=1; is=2; new window( "对数正态密度", vlistbox( gr = graph box( framesize(500,300), xscale(0,3), yscale(0,4), double buffer, xaxis(show major grid), yaxis(show major grid), YFunction(exp(-(log(x)-log(iu))^2/(2*is^2))/(is*x*sqrt(2*pi())),x); text({1,0.5},"u",iu,"s",is)), hlistbox(sliderbox(0,4,iu,gr<<reshow),textbox("mu")), hlistbox(sliderbox(0,4,is,gr<<reshow),textbox("sigma")), buttonbox("重新显示",gr<<reshow) ) );
使用global box
iu=1; is=2; new window( "对数正态密度", vlistbox( gr = graph box( framesize(500,300), xscale(0,3), yscale(0,4), double buffer, xaxis(show major grid), yaxis(show major grid), YFunction(exp(-(log(x)-log(iu))^2/(2*is^2))/(is*x*sqrt(2*pi())),x); text({1,0.5},"u",iu,"s",is,"或者键入新值")), hlistbox(globalbox(iu)), hlistbox(globalbox(is)) ) );
模式控件和非模式控件
非模式对话框(如用于所有 JMP 启动对话框的对话框)与报表和其它显示列表相同。下列每个元素都可以合并到其中。这些函数与相应的模式函数的主要差别在于这些函数可以附加可选脚本。如果要执行与任 何这些控件关联的操作,请将脚本视为控件的最后一个参数。例如, comboObj = comboBox({ “真” , “假” }, <<set(1),print(comboObj<<Get)) 每次更改选择时都输出选定的项目编号(此种情况下为 1 或 2,因为在此组合框中有两个项目)。 模式控件和非模式控件之间的另一个差别在于将项目和字符串指定为参数的方式。对于模型对话框,项目通常是以逗号分隔。在非模式对话框中,项目必须放置在列表中。 
非模式控件
check box可同时选定复选框中任意数目的项目
radio box 任何时候都只能选择单选按钮框中的一个项目
combo box组合框中的项目绘制在下拉菜单中
list box 显示一个显示框列表以供选择
button box绘制包含文本的按钮
如果将消息 Open Next Outline 作为脚本命令发送,将打开下一个外框。如果要给按钮框发送多则消息,则必须是列出的第一个命令。
tab box 绘制带选项卡的对话框窗格
text box 绘制不可编辑的文本框。文本框通常用作其他控件的标签。
text edit box 绘制可编辑的文本框
通过向文本编辑框发送脚本消息,可在其中添加脚本。这通常在创建框时最方便。只需添加脚本消息,作为最后一个参数。  其中get text 获取文本框的字符
col list box返回显示框以选择数据表列
all指定应包含当前数据表中的所有列。width以像素为单位。max selected是可在列表中选择的最大项目数。Nlines是要在框中显示的行数。
line up box返回将其内部显示框整齐排列的显示框
在nc列中绘制在displaybox参数中指定的显示框。对于列之间的空间,可以以像素为单位指定可选间距。
border box 用于在displaybox参数周围添加空间
例如在公式周围添加边框
panel box返回具有标题并包含其他显示框的显示框

journal box函数构造适用于与其他显示框粘合在一起的显示框,从而在窗口中创建一种显示
其中 "日志文本" 是从日志文件中提取的文本。 因为日志文本有很多关于框跟框之间的关系的规则,所以建议获得日志文本的唯一方法是 高亮度显示一个区域,然后使用 Journal 命令创建只包含该项目的日志,并保存它。现在在 文本编辑器中打开该文件(为此可能需要更改文本扩展名)。然后将其粘贴到脚本中,作 为 Journal Box 参数。极力建议您使用 "\[ ... ]\" 引号机制,从而不必在日志文本中转义 双引号。 获取日志文本的另一种方法是发送 <<GetJournal 到 displayBoxes。
将一个命令列表存储在全局变量中,然后使用popup box显示项目
commandList = {"命令 1", Print( "命令 1" ), "命令 2", Print( "命令 2" ), "命令 3", Print( "命令 3" ), "命令 4", Print( "命令 4" ), "", Empty(), //生成一个分隔符行 "命令 5", Print( "命令 5" ), "命令发出", Throw( "命令发出1" ), "命令错误", Sqrt( 1, 2, 3 ), "命令终止", Print( "命令终止" ) }; New Window( "检验弹出式菜单", Text Box( "弹出式菜单检验" ), Popup Box( commandList ) ); 用以建立额外的分析菜单
选项卡对话框也可用于显示树中
NewWindow("检验选项卡页", TabBox("第一页", vlistBox( textBox("第一页的第一行"), textBox("第一页的第二行") ), "第二页", vlistBox( textBox("第二页的第一行"), textBox("第二页的第二行") ), "第三页", vlistBox( textBox("第三页的第一行"), textBox("第三页的第二行") ) ));
发送<<setslected(n)到选项卡对话框对象,其中n为选项卡编号,可以指定应选择哪个选项卡
高级实例
绘制聚类平台显示框的仿制版本,然后使用给定参数启动平台。
K均值聚类平台的选项框
dt = Current Data Table(); nc = N Col( dt ); lbwidth = 130; methodlist = {"平均", "重心", "Ward", "单一", "完全"}; notimplemented = Expr( Dialog( "功能尚未进行", button( "确定" ) ) ); clusterDlg = New Window( "聚类", Border Box( Left( 3 ), top( 2 ), V List Box( Text Box( "查找接近且具有相似值的点" ), H List Box( V List Box( Panel Box( "选择列", colListData = Col List Box( All, width( lbWidth ), nLines( Min( nc, 10 ) ) ) ), Panel Box( "选项", V List Box( comboObj = Combo Box( {"分层", "K 均值"}, <<Set( 1 ) ), Panel Box( "方法", methodObj = Radio Box( methodList, <<Set( 3 ) ) ), checkObj = Check Box( {"标准化数据"}, <<Set( 1, 1 ) ) ) ) ), Panel Box( "为选定列指定角色", Lineup Box( N Col( 2 ), Spacing( 3 ), Button Box( "Y,列", colListY << Append( colListData << GetSelected ) ), colListY = Col List Box( width( lbWidth ), nLines( 5 ), numeric ), Button Box( "排序", colListO << Append( colListData << GetSelected ) ), colListO = Col List Box( width( lbWidth ), nLines( 1 ), numeric ), Button Box( "标签", colListL << Append( colListData << GetSelected ) ), colListL = Col List Box( width( lbWidth ), nLines( 1 ) ), Button Box( "依据", colListB << Append( colListData << GetSelected ) ), colListB = Col List Box( width( lbWidth ), nLines( 1 ) ) ) ), Panel Box( "操作", Lineup Box( N Col( 1 ), Button Box( "确定", If( (comboObj << Get) == 1, HierarchicalCluster( Y( Eval( colListY << GetItems ) ), Order( Eval( colListO << GetItems ) ), Label( Eval( colListL << GetItems ) ), By( Eval( colListB << GetItems ) ), Method( methodList[methodObj << Get] ), Standardize( checkObj << get( 1 ) ) ), KMeansCluster( Y( colListY << GetItems ) ) ); clusterDlg << CloseWindow; ), Button Box( "取消", clusterDlg << CloseWindow ), Text Box( " " ), Button Box( "移除", colListY << RemoveSelected; colListO << RemoveSelected; colListL << RemoveSelected; colListB << RemoveSelected; ), Button Box( "重新调用", notImplemented ), Button Box( "帮助", notImplemented ) ) ) ) ) ) ); 
发送消息到构造的显示
如果将某个构造赋予名称,则该名称将成为对该窗口的引用,而窗口内将拥有显示框。通过下标,可以将消息发送到窗口的显示框。
从头构建自己的显示
summarize( a=by(:age),c=count, sumht=sum(:height),meanht=mean(:height), minht=min(:height),maxht=max(:height) ); sr = new window( "汇总结果", table box( stringcolbox("年纪",a), numbercolbox("计数",c), numbercolbox("总和",sumht), numbercolbox("均值",meanht), numbercolbox("最小值",minht), numbercolbox("最大值",maxht) ) );
构造包含平台的显示框
可能需要构造另一种显示只是JMP分析平台中的结果组合
csp = New Window( "六合性能", Outline Box( "六合性能", H List Box( V List Box( cc = control chart( char col(:height), k sigma( 3 ) ) ), V List Box( dist = distribution( columns( :height ) ) ) ) ) );
构造自定义平台
通过对话框从用户收集系数,从而改善了该实例。 本部分进一步将该实例发展为完整的自定义平台,首先弹出一个对话框,提示输入系数,然后求根,最后在自定义窗口中显示结果和图形。

日志
将对象置于日志窗口相对容易一些,较难的是了解如何处理日志本身
假设生成一个数据表
要记录报表结果日志,请使用journal window消息
要将日志保存在文件中,请使用
要将日志另存为Html,请使用
语法参考
下面各表详细介绍了各种类型的显示框。首先是用于构造显示框的命令,然后是各种类型的框可以接收的消息。 SliderBox 和 ButtonBox 不能用于显示树下标(如 myWindow[sliderbox(1)] 就不起作用),因此它们没有消息。
显示框构造函数
用于所有显示框的消息
用于outline box的消息
用于frame box的消息
用表框的消息
用于text box的消息
用于Axis box的消息
用于number col box的消息
用于string col box的消息
用于matrix box的消息
用于nom axis box的消息
8、矩阵 ,JMP的矩阵代数
矩阵代数是一种表示二维数字表矩阵运算的简洁方式。JSL支持矩阵数据类型,并且可以执行多种矩阵运算。大多数统计方法都可以通过简单的矩阵符号来表示,大写粗体变量为矩阵,小写粗体字母一般表示向量矩阵

基本信息
定义
矩阵为数字行和列构成的矩形表。JSL支持矩阵值以及多个矩阵运算符。矩阵表达式中一般会使用统计方法。本章所用的标量指的是简单的非矩阵数字值。如果某个矩阵只有一行或一列,一般称之为行向量或列向量,有时只称为向量。
构造矩阵
可以使用【】来指定矩阵文字,并且值与值之间使用空格或其他“空白”字符来分隔,行和行之间使用逗号或分号来分隔。
仅指定正负号,使矩阵只含有+1/-1元素
使用表达式构造矩阵
如果您在列表中存储了多个数字表达式,则还可以使用matrix函数将其转换为矩阵。

特殊矩阵构造器
函数identity可用于构造指定维度的单位矩阵。
函数J可用于构造指定的行数和列数作为矩阵的前两个参数,其余元素均是第三个参数的矩阵。
index函数用于生成从第一个参数到最后一个参数均为整数的行向量,双冒号::是具有相同功效的中缀运算符:
函数shape可用于将现有矩阵的行数分布更改为指定维度来重塑矩阵
删除行和列
通过以下赋值运算可以删除行和列
查询函数
ncol/nrow可分别返回矩阵或数据表中的列数和行数

子主题
数字运算符
基本算术
可以对矩阵执行加减乘除运算,标准的乘法运算符将变成矩阵乘法器,而不是元素乘法器
如果给定两个矩阵参数,“*”和“/”中缀运算符以及等效的multiply和divide函数将执行矩阵乘法和矩阵除法运算。 但是如果给定一个矩阵和一个标量,它们将按照元素执行乘法和除法运算。 也可以使用matrix mult函数来指明矩阵乘法 要强制执行元素乘法,请使用:*或等效的emult函数,标量乘法是可交换的,而矩阵乘法不是 要强制执行元素除法,请使用:/或等效的ediv函数
标量数字库函数
其他运算符和函数按矩阵中的元素执行运算,例如A为矩阵,B=SQRT(A),则对矩阵A中的每一个元素都执行SQRT函数。
这类函数包括
处理值
合并
concat可将两个并列矩阵合并为一个更大的矩阵,行数必须相同。等效中缀运算符||
vconcat可将两个上下相连的矩阵堆叠在一起,列数必须相同。等效中缀运算符|/
concat和vconcat均可合并空矩阵、标量和列表

替代合并运算符||=和|/=,a||=b 等效于 a=a||b 而 a|/b 等效于 a=a|/b。
对角
diag可用于根据方阵或向量创建对角矩阵
例如D=[1 -1 1],Diag(D)=[1 0 0, 0 -1 0, 0 0 1]
vecdiag可根据矩阵对角元素创建向量

trace函数将返回方阵对角元素的和,即矩阵的迹:
转置
transpose函数,用于矩阵的转置,后引号是其等效的后缀运算符,即A'和At
矩阵和数据表
矩阵数据表可以相互进行转换
下标
使用下标运算符可以挑选出矩阵中的元素或子矩阵,下标一般写在矩阵后的方括号中,其包含的是行和列参数
单元素
表达式A[I,J]表示抽出第i行第j列的元素,返回一个标量数字。
矩阵或列表下标
还可以指定下标值列表或矩阵,而结果为由选定行和列构成的矩阵
 
单下标
单下标处理矩阵的方式与将所有行转换成一个列,而且其中的各个列首尾相连的效果一样。双下标 A[i,j] 与单下标 A[(i-1)*ncol(A)+j] 生成相同的结果
选择所有行或列
利用下标参数0可以选择所有行和列
通过下标赋值
可以通过下标在矩阵中插入新值。下标可以是单下标、下标矩阵或列表,也可以是所有行或列的0下标。要插入的选定行和列的数目必须和插入参数的维度相同,或者是可以反复插入到下标位置的标量。
运算符赋值
可以使用运算符对矩阵或矩阵下标进行赋值,例如+=
*= A[loc(A<0)]*=-1;
行或列范围
使用index运算符来创建范围矩阵,运算符为::

loc
loc函数可用于创建由所有A为真的位置构成的矩阵,为列矩阵,且位置为单下标

locmin和locmax
用于返回矩阵最小和最大元素所在的位置,位置为单下标的展现形式
locsorted
用于创建矩阵A的位置矩阵,其中这些位置上的值小于或等于B中给的定值
比较、范围检查和逻辑运算符
JMP的比较、范围检查和逻辑运算符也可用于矩阵,并生成元素化的布尔值结果矩阵

any运算符,矩阵中存在非0运算符,返回1
all运算符,矩阵中所有元素均为非0元素,则all返回1
min 返回矩阵中的最小元素,或者指定为参数的矩阵的最小值
max 返回矩阵中的最大元素,或指定为参数的矩阵的最大值

分级和排序
rank可以返回行或列向量中元素等级的列向量,这些等级可用于生成排序的列向量
 说明:rank返回了向量的秩
矩阵运算符
求解线性系统
Inverse或inv,inverse用于返回方阵(非奇异矩阵参数)的逆矩阵,也可简写为INV,矩阵和逆矩阵的乘积返回一个单位矩阵。
矩阵和其他数据类型
矩阵和数据表
将数据从数据表移动到矩阵中
get as matrix将根据该数据表中的所有数值列创建一个有值的矩阵,该行数也可发送至数据表列引用的变量
get as matrix 同时还支持列列表参数,无论是名称还是字符串

dt << get selected rows可用于返回由数据表中当前选定的行构成的矩阵
dt <<get rows where(expr)可用于返回由表达式为真时该位置上的行值构成的矩阵
将数据从矩阵移动至数据表中
如果col是一个包含数据表列引用的变量,而x是值的列向量,则下面的表达式可以将x的值赋值到列中,因为许多值都在x中

另外,as table()命令可用于根据矩阵参数创建一个新的数据表,这些列命名为col1,col2,依次类推。
矩阵与报表
可以从窗口报表中提取值矩阵,如果table box是一个包含表框引用的变量,则get as matrix将根据该列创建一个由值的列向量构成的矩阵A

如果colbox是一个包含报表表列框引用的变量,则get as matrix将根据该列创建一个由值的列向量构成的矩阵A

统计实例
回归实例
假设要进行自己的回归计算,而不使用JMP内置的工具
特殊1:图像处理应用
构造函数
new image(<width,height>,<existing image>)
图片对象,可用于将图片添加到帧或显示框
open(file path,jpg|png|gif|bmp|tif)
用于打开图片对象
项消息
obj << add frame
向动画图像添加新帧。在使用“设置像素”之前,该帧不包含任何内容。可以指定可选的持续时间参数,该参数指示以毫秒表示的帧持续时间。若省略持续时间参数,当前帧的持续时间将被用作新添帧的持续时间。若没有其他帧,将使用默认持续时间 100 毫秒。
crop,裁剪图片
obj << Crop( Left( number ), Right( number ), Top( number ), Bottom( number ) )
使用指定的维度,根据现有的图像进行修剪以创建,若无L值,则替换原图片
Filter 根据指定算法过滤图像
obj << Filter( despeckle|edge|enhance|median|negate|normalize|sharpen|contrast|gamma|reduce noise|gaussian blur|canny, <number> )
反复滤波,影响图像质量
方法1、despeckle 消斑 移除不与周围像素融合的像素 例如,被白色像素包裹的黑色像素转换为白色像素
方法2、edge 边缘,是物体轮廓外的所有物体变暗

方法3、enhance 增强 降低噪声图像中像素之间的对比度
方法4、median 中值 将每个像素颜色值替换为周围像素的中值

方法5、negate 否定 将像素颜色替换为其互补颜色

方法6、normalize 标准化 移除顶部和底部颜色值的百分比。然后拉伸颜色值以填充剩余图像,这个过程增加了颜色的强度。

方法7、sharpen 锐化 使像素的边缘更加清晰

方法8、contrast 对比度 优化浅色和深色。较大的值会使图像变亮

方法9、gamma 平衡图像的亮度和RGB比例,较大的值产生较轻的图像

方法10、reduce noise 去噪 找到最小和最大的颜色值,并用与周围像素一致的值替换它们,较大的值会创建更平滑的图像。

方法11、gaussian blur 高斯模糊 以指定的半径模糊像素。指定更大的半径创建更平滑的图像。在JSL中还可以指定sigma 较大的sigma值会使图像更平滑

方法12、canny 边缘检测滤波器,用以构建边缘图像

不同的方法可以交替使用
flip both 同时将图像水平和垂直翻转
flip vertical 将图像上下翻转
flip horizontal 将图像水平翻转
get current frame 返回当前帧号,对于图像为0,对于GIF图像,则为0到帧数减1
get frame durations 返回每帧之间的暂停时间矩阵,指定的时间以毫秒为单位
get n frames 返回图像的帧数,可以判断是否是动画文件
get n loops 返回动画图像应遍历它的序列的次数。值为零表示它应无限次遍历
get pixels 返回图像代表的颜色矩阵
mat = img << Get Pixels(); {r, g, b} = img << Get Pixels("rgb"); {r, g, b, a} = img << Get Pixels("rgba") 若未指定颜色指示符,则返回表示像素值的 JSL 颜色的矩阵。 颜色指示符“rgb”将返回三个矩阵(分别为红色、绿色和蓝色)的列表。 指定“rgba”将返回 alpha(透明度)通道以及红色、绿色和蓝色。
get size 返回包含图像宽度和高度的列表
{w,h} = pic << Get Size {w,h} = pic << Size 别名项: GetSize, Size 返回包含图像宽度和高度的列表。
remove frame(第几帧) 从动画图像中删除一帧,传递要删除的帧的索引
rotate(angle)按指定的旋转角度旋转图像,顺时针
save image(filepath,image type)有效的图像类型有PNG\JPG\GIF\TIFF\BMP\PDF,若未指定图像类型或无法理解,则保存PNG格式
scale(scale|XScale,yscale)将尺度因子应用于图像的宽度和高度
set current frame(frame) 设置当前帧号,操作将对当前帧进行
set frame duration(duration)设置动画图像中当前帧的持续时间,单位毫秒
set n loops(loops)设置动画图像应遍历它的序列的次数
set pixels 设置图像的像素矩阵

set size({width,height})根据指定的宽度和高度设置图像大小
transparency(fraction)对图像应用透明度,有效值介于0和1之间