选择值发生变化的行

时间:2019-09-26 15:34:43

标签: sas

我希望您能提供一些指导。我认为我应该在数据步骤中使用保留,但是我不太确定它是如何工作的。

我有一个3列的表格。

ID,日期,值(数字)。

该表已按ID1和日期排序 我只想选择数量根据前一个值更改的行,然后删除不更改的行。下面的例子

id      | Date  |amount |
A       |  01JAN|   1   |
A       |  02JAN|   1   | <- Drop this row
A       |  03JAN|   2   |  
B       |  01JAN|   0   |
B       |  02JAN|   1   |

2 个答案:

答案 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;
相关问题