我希望您能提供一些指导。我认为我应该在数据步骤中使用保留,但是我不太确定它是如何工作的。
我有一个3列的表格。
ID,日期,值(数字)。
该表已按ID1和日期排序 我只想选择数量根据前一个值更改的行,然后删除不更改的行。下面的例子
id | Date |amount |
A | 01JAN| 1 |
A | 02JAN| 1 | <- Drop this row
A | 03JAN| 2 |
B | 01JAN| 0 |
B | 02JAN| 1 |
答案 0 :(得分:2)
您可以在NOTSORTED
语句上使用BY
关键字。因此,尽管数据是按ID和DATE排序的,但BY语句会创建FIRST./LAST。标记而是基于ID和AMOUNT。
data want ;
set have ;
by id amount notsorted ;
if first.amount;
run;
答案 1 :(得分:1)
以下解决方案使用keep语句记住上一条记录中的值,将其与当前记录进行比较,如果数量相同则将其删除(仅检查相同的ID值-如果要引入一些日期条件,由于您的问题没有指定日期检查,因此您需要在此处进行操作。
data want;
set have;
by id;
retain prev_id ' ';
retain prev_amt;
if _N_ = 1 then call missing(prev_id, prev_amt);
if prev_id = id and prev_amt = amount then delete;
prev_id = id;
prev_amt = amount;
keep id amount date;
run;