繁体   English   中英

为SAS中的重复项创建ID变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM