выделять строки с изменением значения - PullRequest
0 голосов
/ 26 сентября 2019

Буду признателен за руководство.Я думаю, что я должен использовать сохранение на шаге данных, но я не совсем уверен, как это работает.

У меня есть таблица с 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 ]

2 голосов
/ 26 сентября 2019

Вы можете использовать ключевое слово NOTSORTED в выражении BY.Поэтому, хотя данные сортируются по ID и DATE, оператор BY создает FIRST./LAST.флаги на основе ID и AMOUNT вместо этого.

data want ;
  set have ;
  by id amount notsorted ;
  if first.amount;
run;
1 голос
/ 26 сентября 2019

Следующее решение использует оператор retain для запоминания значений из предыдущей записи, сравнивает его с текущей записью и удаляет, если сумма одинакова (проверяет только те же значения идентификатора - если вы хотите ввести некоторые условия даты, вам нужно будет сделать это здесь, поскольку в вашем вопросе не указаны какие-либо проверки на дату).

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;
...