Удалить наблюдение (запись), если оно повторяется в переменной (столбце) - PullRequest
0 голосов
/ 26 сентября 2019

Это мои данные:

enter image description here

Мне нравится писать код, который удаляет второе наблюдение (выделено), ЕСЛИ Var1 повторяется, И Var3 равно 1Таким образом, моя результирующая таблица будет выглядеть так:

enter image description here

Кроме того, эти повторы могут появляться в любом порядке.Например, Var3 может быть «1» в начале, в середине, а также в конце серии повторений.

Спасибо

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Убедившись в правильности сортировки данных, вы можете сделать это (не проверено):

data want;
  set have;
  sortLast = (Var3 = 1);
run;

proc sort data=want;
  by Var1 sortLast;
run

data want;
  set want;
  if _N_ > 1 then do;
    Var1_lag = lag(Var1);
    if Var1 = Var1_lag and Var3 = 1 then delete;
  end;
  drop sortLast Var1_lag;
run;
1 голос
/ 27 сентября 2019

Если данные уже отсортированы по var1, строки var3=1 можно просто удалить

data want;
  set have;
  by var1;
  if var3=1 
     and not (first.var1 and last.var1) /* test for group with more than one row */
  then
    delete;
run;
1 голос
/ 26 сентября 2019

Если я правильно понимаю, вы хотите сохранить «1» значения только тогда, когда они являются единственным значением для дачи var1.Если это правильно, можно сказать, что это делается в SQL:

select t.*
from t
where var3 <> 1 or
      not exists (select 1 from t t2 where t2.var1 = t.var1 and t2.var3 <> 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...