Выбор первой группы строк в случае дублирования второй группы - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть данные, как показано ниже (имя набора данных - Иметь)

ID   NAME  AMOUNT PREFER
ABC  Test1  123   Pref1
ABC  Test1  456   Pref1
ABC  Test1  789   Pref1
ABC  Test1  123   Pref2
ABC  Test1  456   Pref2
ABC  Test1  789   Pref2

, и я хочу, чтобы первая группа выводилась только как

ID   NAME  AMOUNT PREFER
ABC  Test1  123   Pref1
ABC  Test1  456   Pref1
ABC  Test1  789   Pref1

Пробовал до сих пор.простой шаг данных, такой как

Data want;
set have;
by ID PREFER;
if first.PREFER;
run;

Это даст мне

ID   NAME  AMOUNT PREFER
ABC  Test1  123   Pref1
ABC  Test1  123   Pref2

Пожалуйста, предложите что-нибудь в Data Step или Proc SQL

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Звучит так, как будто вы, вероятно, хотите что-то вроде этого:

data have;
input ID $ NAME $ AMOUNT PREFER $;
cards;
ABC  Test1  123   Pref1
ABC  Test1  456   Pref1
ABC  Test1  789   Pref1
ABC  Test1  123   Pref2
ABC  Test1  456   Pref2
ABC  Test1  789   Pref2
run;

data want;
set have;
by id;
retain t_prefer;
if first.id then t_prefer = prefer;
if prefer = t_prefer;
drop t_prefer;
run;

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

0 голосов
/ 12 апреля 2019

Вы можете просто отслеживать номер группы, в которой находится текущая запись.

data want;
  set have;
  by ID PREFER;
  if first.id then group=0;
  group+first.prefer;
  if group=1;
run;
...