亲爱的社区我有一个问题,那就是如何消除第一个重复的行。
例子
| 天然橡胶 | 日期 | 数数 |
| 4567 | 2017-01-21 | 1个 |
| 5555 | 2017-02-03 | 1个 |
| 5555 | 2017-02-10 | 2个 |
| 8745 | 2015-03-10 | 1个 |
| 8345 | 2016-05-01 | 1个 |
| 9563 | 2016-01-02 | 1个 |
| 9563 | 2016-01-10 | 2个 |
在这个例子中,是否有一个脚本如何找到我在此处用粗体文本标记的重复项,并直接删除这些行或创建一个额外的列,例如保留和消除?
我正在使用 JMP Pro 14.0.0(64 位)
您忠诚的
医学博士 Lars Enochsson, 博士
外科教授
外科和围手术期科学系
于默奥大学
瑞典胆结石手术和 ERCP 登记处负责人 GallRiks
瑞典外科学会科学秘书
电子邮件: lars.enochsson@umu.se
@小姐,
您多年的 JMP 经验和知识在您的社区讨论回复中显而易见。我非常感谢您参与社区。
吉姆
实际上,我于 1994 年在瑞典乌普萨拉大学第一次接触到 JMP,并从那时起就一直在使用它。 即使 JMP 在瑞典学术界仍然不是很常用,但我已经“转换”了相当多的 SPSS 用户。
同意,这个社区很棒。
这个脚本也应该工作:
// Delete all multiplicate rows except the one with the latest date (sorting does not matter).
dt = Current Data Table();
dt << Select Where(Col Max(:Date, :Nr) > :Date);
dt << Delete rows;
编辑:如果重复项可以具有相同的日期,则效果更好,但需要按日期排序。
dt << Select Where(Col Max(Row(), :Nr) > Row());
dt << Delete Rows;
这是一个可以完成工作的脚本:
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 7 ),
New Script(
"Source",
Data Table( "Transpose of Untitled 17" ) <<
Subset( All rows, Selected columns only( 0 ) )
),
New Column( "Nr",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4567, 5555, 5555, 8745, 8345, 9563, 9563] )
),
New Column( "Date",
Numeric,
"Continuous",
Format( "yyyy-mm-dd", 12 ),
Input Format( "yyyy-mm-dd" ),
Set Values(
[3567801600, 3568924800, 3569529600, 3508790400, 3544905600, 3534537600,
3535228800]
)
),
New Column( "Count",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 1, 2, 1, 1, 1, 2] )
)
);
dt << select duplicate rows( Match( :Nr ) );
wait(5);
dt2 = dt << subset( invisible, selected rows( 1 ), selected columns( 0 ) );
dt << delete rows;
Wait(5);
dt = dt << Update( With( dt2 ), Match Columns( :Nr = :Nr ) );
Close( dt2, nosave );
嗨拉斯,
重复项是否总是按顺序排列,或者它们之间是否有记录?如果它们总是像您的示例中那样顺序排列,您可以执行以下操作:
dt = Current Data Table();
del_rows = {}; //initiate list to contain list of rows that are duplicates
for(i = 1, i<=N Row(dt), i++,
if(:Nr[i] == :Nr[i+1], insert into(del_rows,i)) //if Nr for current row is same as next, then put current row in del_rows
);
dt << Delete Rows(del_rows); //delete all rows in del_rows