如何对列进行排序并删除重复的行<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />刚接触 JMP 脚本编写,想要过滤工具错误表。 我有一组数据,想要按警报日期进行过滤,然后删除重复的错误行。 例如,如果错误在 1:00 发生,并且在 1 小时内重复了 4 次,我想删除重复,并且仅在错误首次出现时捕获。
我的脚本如下,我想在按警报日期(降序)删除重复行后重新使用该脚本。
dt = 打开(“SR_Loop_LAM_002_Alarm_Log.csv”);
dt << 排序(按(:ENTITY),顺序(升序),替换表(0));
对于 (i = nrows (dt), i>0, i--,
if(:实体[i-1]==:实体& :ALARM_ID[i-1] == :ALARM_ID & 日期差(:ALARM_DATE[i-1], :ALARM_DATE 、“小时”、“小数”) < 1,
dt << 删除行 (i))
);
dt << 保存("SR_Loop_LAM_002_Alarm_Log.csv");
关闭(dt,不保存)
回复:如何对列进行排序并删除重复的行感谢大家的热烈响应! 我已经编辑了我的脚本,现在它运行得很好。
回复:如何对列进行排序并删除重复的行嗨埃文,
有多种方法可以解决这个问题。重复删除存在一个特定的挑战,因为您希望删除同一警报一小时内发生的“重复”。这需要滞后函数逻辑,而滞后函数逻辑又要求在执行之前对数据进行适当的排序。此外,如果在执行下一个逻辑之前删除一行,那么最终可能会在循环中出现越界错误。一种解决方法是设置一个用于重复删除的标志,这可以通过创建布尔列或使用一些内置功能来完成。下面我修改了您的代码以使用行选择作为该标志。执行逻辑以确定警报是否重复后,立即删除所有行。通过以不可见模式打开表格来避免屏幕 I/O,可以进一步提高速度。
/* 数据表不可见以加快执行速度 */
dt =打开( “SR_Loop_LAM_002_Alarm_Log.csv” , 无形的) ;
/* 更新多重排序 */
dt <<种类(经过( :实体, : ALARM_DATE ) ,命令(上升,上升) ,替换表( 0 ) ) ;
/* 首先清除行和列选择(只是良好的编码习惯) */
dt <<清除选择;
dt <<清除列选择;
/* 选择满足指定条件的行
因为这是从下到上的循环应该在第 1 行停止(没有第 0 行)
*/
为了(我= N 行( dt ) ,我> 1 ,我--,
如果(
:实体[我- 1 ] == :实体[我] &
:警报ID [我- 1 ] == :警报ID [我] &
日期差异( : ALARM_DATE [我- 1 ] , : ALARM_DATE [我] , “小时” , “分数” ) < 1 ,
dt <<选择行(我)
)
) ;
/* 删除选定的行 */
dt <<删除行;
/* 最终排序 */
dt <<种类(经过( \ : ALARM_DATE ) ,命令(德升序) ,替换表( 0 ) ) ;
dt <<节省( “SR_Loop_LAM_002_Alarm_Log_cleansed.csv” ) ;
关闭( dt ,没有保存) ;
回复:如何对列进行排序并删除重复的行你好埃文辰870
看看过去的讨论,该脚本对于删除也非常快速且强大,因为它使用“获取行”
回复:停止循环
祝你好运!
回复:如何对列进行排序并删除重复的行如果您使用 Lag() 函数,您将不会收到错误。
纬度(实体) 将指向保存列(行)为 ENTITY[i-1]
回复:如何对列进行排序并删除重复的行感谢伊恩的快速回复,但脚本仍然没有达到我想要的效果。
目前,我有列 ENTITY、ALARM_DATE、ENTITY_TYPE、ALARM_ID 和 ALARM_DESCRIPTION
1. 我首先希望我的脚本按 ENTITY、ALARM_DATE 或 ENTITY_TYPE 排序
2.然后我想使用 if 循环删除 ALARM_DATE 时间差 1 小时内的重复警报(通过 ALARM_DESCRIPTION)
3.最后我想按ALARM_DATE(降序)排序来替换原始表
因此,根据您的建议,我需要更改为(i = nrows (dt), i>1, i--)?
回复:如何对列进行排序并删除重复的行看起来你已经快到了。 您的“for”循环在 i=1 的值处终止,但您正在索引 i-1=0。 JMP 下标始终从 1 开始。
回复:如何对列进行排序并删除重复的行当前 JMP 错误是“访问或评估‘下标’时行号无效,“ENTITY[i-1]”