我有一个sas
数据集,包含100多个变量。变量pid
- 一个字符变量和year
- 一个数值变量,用于标识数据集中的观察值。
如何创建由具有唯一pid
和year
组合的观察组成的新数据集。也就是说,如果给定的pid
和year
组合不止一次出现,我想删除所有相关的观察结果,而不仅仅是重复的结果。
答案 0 :(得分:3)
我没有使用太多的数据步骤。我使用proc sql对我来说很容易。
proc sql;
create table new_dataset as
select * from old_dataset as a
join
(select pid, year, count(1) from old_dataset group by pid, year having count(1)<2)
as b on a.pid=b.pid and a.year=b.year;
run;
内部查询只获得一次发生的pid和年份。由于having count(1)<2
,不会考虑任何多次出现的pid和year。我只是通过加入pid和year来获得那些观察结果。这实际上不需要排序。
如有任何问题,请告诉我。
答案 1 :(得分:2)
在数据步骤中简单使用first.
和last.
即可。如果数据尚未按照pid和年份排序,请运行proc sort
。
proc sort data=have;
by pid year;
run;
data want;
set have;
by pid year;
if first.year and last.year then output; /* only keep unique rows */
run;
答案 2 :(得分:2)
在proc sort中使用UNIQUEOUT和NOUNIQUEKEY选项来获得单步解决方案。
data class;
set sashelp.class;
run;
proc sort data=class nouniquekey uniqueout=unique_data;
by sex age;
run;
答案 3 :(得分:1)
您可以生成包含多次出现的pid和year组合的数据集,然后将其与其余部分合并以删除匹配项:
proc sort data = have nodupkey dupout = duplicates;
by pid year;
run;
data want;
merge have
duplicates(in = a keep = pid year);
by pid year;
if not(a);
run;