我有如下数据(数据集名称-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中提供一些建议
答案 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;