在SAS中基于ID和Year变量标记重复/多次重复记录的方法
SAS数据集新增重复项标记Flag变量
示例原始数据
| ID | Year |
|---|---|
| A | 1989 |
| A | 1989 |
| A | 1989 |
| B | 1990 |
| B | 1990 |
| C | 1991 |
| C | 1992 |
需求说明
保留所有原始记录,新增Flag变量,规则如下:
- 同一
ID+Year组合的第一条记录,Flag=0 - 组合内第二条及后续记录,
Flag依次为1、2…… - 若
ID+Year组合仅出现一次,Flag保持缺失(不设置)
实现代码
步骤1:统计每个组合的出现频次
先通过proc sql统计每个ID+Year组合的记录数,用于后续判断是否需要标记:
proc sql; create table count_table as select ID, Year, count(*) as freq from your_dataset /* 替换为你的实际数据集名称 */ group by ID, Year; quit;
步骤2:合并数据并生成Flag变量
将频次统计结果与原数据合并,同时按组内位置生成Flag:
data flagged_dataset; /* 输出的新数据集名称 */ merge your_dataset count_table; by ID Year; retain group_count; /* 保留组内计数器,跨观测生效 */ /* 每个新分组开始时重置计数器 */ if first.Year then group_count = 0; group_count + 1; /* 根据规则赋值Flag */ if freq > 1 then Flag = group_count - 1; /* 组合唯一时Flag自动保持缺失,无需额外赋值 */ drop freq group_count; /* 移除不需要的中间变量 */ run;
输出结果
处理后的数据集如下:
| ID | Year | Flag |
|---|---|---|
| A | 1989 | 0 |
| A | 1989 | 1 |
| A | 1989 | 2 |
| B | 1990 | 0 |
| B | 1990 | 1 |
| C | 1991 | . |
| C | 1992 | . |
内容的提问来源于stack exchange,提问作者mennit
相关产品推荐
相关产品推荐

