[英]Creating an ID variable for duplicates in SAS
我有一个带有ID变量的SAS数据集,该变量在人员级别上应该是唯一的,但实际上有重复项。 我想做的是创建一个重复的ID,该ID仅在一个人具有重复的ID值时才填充,如下所示:
ID Dupe_ID
1
2 1
2 1
3
4 2
4 2
任何帮助深表感谢!
data have;
input ID;
cards;
1
2
2
3
4
4
;
/*if sorted*/
data want;
set have;
by id;
if first.id and not last.id then
_dup+1;
dup_id=_dup;
if first.id and last.id then
call missing (dup_id);
drop _dup;
run;
在SAS 9.3+中,可以使用proc sort
上的新选项。 如果要将数据分为“实际唯一”和“非唯一”数据集(以便以后处理非唯一性并确定它们应为的数据集),请执行以下操作:
proc sort data=have out=nonuniquedata nouniquekey uniqueout=uniquedata;
by id;
run;
NOUNIQUEKEY
基本上与NODUPKEY
相反:它仅保留不唯一的记录。 因此,此处的“主要”输出数据集将具有非唯一记录,而“唯一性”数据集将具有唯一的记录。
它的处理方式略有不同,但以防万一,以防您和/或其他人使用dupout=
proc sort
有一个方便的简单dupout=
选项,用于dupout=
非唯一的关键观察值:
proc sort data=have out=want dupout=dups ;
by id ;
run ;
每个id
的首次出现都将进入want
数据集。 具有相同id
所有后续观测值将进入dups
数据集
proc sort data = dataset out = sortdata;
by id;
run;
data younameit;
length dup_id 1;
set sortdata;
by id;
if first.id and last.id then dup_id =;
else dup_id =1;
run;
我的方法是将Data Step与First.
一起使用First.
Last.
在First.
之前的"by" immediately after set statement
之后,需要"by" immediately after set statement
PROCEDURE proc sort
和DATA步骤"by" immediately after set statement
处执行排序First.
Last.
可以在数据步骤中工作。
如果观察值本身是该组(即ID)的第一个和最后一个观察值,则它必须是唯一项。 假设如果有两个观测值id = 2,则较早的观测值将是first.id
,之后的观测值将是last.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.