如果第二组重复,则选择第一组行

时间:2019-04-12 13:04:11

标签: sas

我有如下数据(数据集名称-Have)

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

请在数据步骤或Proc SQL中提供一些建议

2 个答案:

答案 0 :(得分:1)

听起来好像您可能想要这样的东西:

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语句,以便在每个数据步骤的迭代之间保留每个id第一行的prefer值的副本,然后您只能输出值为prefer的行。

答案 1 :(得分:0)

您只需跟踪当前记录所在的组号即可。

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