在 JMP 脚本中对 JMP 数据表进行排序和删除行<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好:
我是 JMP 的新手。 我想根据前两列的条件对数据表进行排序和格式化。 第一列是文本字符串 ("LaserID"),第二列是获取数据的时间 ("time")。 我的目标是派生出另一个与原始表具有完全相同列数的表,以便只有一行特定“LaserID”的数据(即不重复)。 消除具有相同“LaserID”的多行将基于获取数据的时间(“时间”)。
换句话说,新表将由具有唯一“LaserID”的行组成,其中包含最新获取的数据。
我附上了我想要实现的原始表和最终表。 在为此任务编写脚本方面的任何帮助将不胜感激。
回复:在 JMP 脚本中对 JMP 数据表进行排序和删除行嗨大卫,我也在使用你的脚本来消除重复项,但我有一个问题:如果我的专栏(相当于示例中的“LaserID”列)是数字连续的吗?不知何故脚本在我的情况下不起作用......如果我更改列属性以使其成为“charecter”,那么脚本就可以工作。
谢谢。
回复:在 JMP 脚本中对 JMP 数据表进行排序和删除行您已获得一对脚本响应。 如果您想以交互方式执行此操作,请尝试以下步骤。
对表格进行排序激光识别和时间.

然后用一个公式创建一个新列来选择行激光识别在当前行不匹配激光识别在下一行。 由于表格是按激光识别和时间您将获得每个 LaserID 系列的最后一行。
这里的技巧是使用数据类型为行状态和选定状态公式中的状态函数。
选择列 -> 新列...并将数据类型设置为行状态.

然后添加一个公式。

对于公式,从行状态 -> 选定状态.

然后将比较放在 Selected State() 函数中。 这个比较使用滞后()函数使用 -1 参数与值进行比较激光识别在下一行。

现在您只需要通过单击列名称前面的星形图标将新列中的行状态复制到活动行状态区域。

现在你可以使用表格->子集对所选行进行子集化。

希望对您有所帮助!
-杰夫
回复:在 JMP 脚本中对 JMP 数据表进行排序和删除行这是使用 tabulate with max 的替代方法,然后更新:
dt1 =数据表( “最初的” ) ;
选项卡1 = dt1 <<制表(
显示控制面板( 0 ) ,
添加表(
列表(分析列( :时间) ,统计数据(最大限度) ) ,
行表(分组列( :激光识别) )
) ,无形的
) ;
dt2 =选项卡1 <<制作成数据表;
选项卡1 <<关闭窗口() ;
dt2 <<更新(
和( dt1 ) ,
匹配列( :激光识别= :激光识别, :姓名( “最大(时间)” ) = :时间) ,
从更新表中添加列(
:脉冲重复频率,
:姓名( “功率(W)” ) ,
:姓名( “普蒙(W)” ) ,
:脉冲重复频率2 ,
:姓名( “功率 2(W)” ) ,
:姓名( “Pmon2(W)” )
)
) ;
回复:在 JMP 脚本中对 JMP 数据表进行排序和删除行像这样的事情应该这样做:
获取最新行=功能({ dt , ID } , {默认本地} ,
// 如果我们假设日期时间顺序,这会简单得多!
//仅获取与指定激光器 ID 匹配的那些行
lstRows = dt <<获取行( :激光识别== ID ) ;
//获取对应的时间列表
第一时间=柱子( dt , “时间” )[ lstRows ] ;
//定位最大时间
位置=最大(第一时间) ;
// 返回包含最大时间的行
lstRows [位置]
) ;
//源数据表
dt =数据表( “最初的” ) ;
// 获取激光 ID 的唯一值列表
总结(列表ID =经过( :激光识别)) ;
// 创建空的决赛桌
新数据= dt <<子集(复制公式( 0 )) ;
新数据<<选择所有行;
新数据<<删除行;
新数据<<设置名称( “最终的” ) ;
// 为每个结果创建一行
柱子(新数据, “激光识别” ) <<设置值(列表ID ) ;
//遍历每个ID以找到具有最新日期的行
为了(我= 1个,我<= NI项目(列表ID ) ,我++,
当前ID =列表ID [我] ;
r =获取最新行( dt ,当前ID ) ;
展示( r ) ;
//将第 r 行的值放入新数据表
为了( C = 1个, C <= N列( dt ) , C ++,
柱子(新数据, C )[我] =柱子( dt , C )[ r ]
)
) ;