SAS数据处理:按ID与重复日期根据Variable1设置Index值
SAS数据处理:按ID分组调整重复日期的Index值
现有数据集(have)
data have; input ID :$20. Date :date09. Variable1 Variable2 Index; format Date date9.; cards; 0001 22JAN2020 1 0 33 0001 13FEB2020 . . . 0001 13FEB2020 0 1 22 0001 03OCT2021 . . . 0002 02SEP2014 0 1 1 0002 10OCT2014 . . . 0002 10OCT2014 1 0 13 ;
期望输出数据集(want)
data want; input ID :$20. Date :date09. Variable1 Variable2 Index; format Date date9.; cards; 0001 22JAN2020 1 0 33 0001 13FEB2020 . . . 0001 13FEB2020 0 1 . 0001 03OCT2021 . . . 0002 02SEP2014 0 1 1 0002 10OCT2014 . . . 0002 10OCT2014 1 0 . ;
处理规则
- 按
ID分组处理 - 当同一
ID下存在重复Date时,若该日期的前一行中Variable1值缺失,则将该日期的下一行的Index值设为缺失
实现代码
data want; set have; by ID Date; /* 保留前一行的Variable1值 */ retain prev_var1; /* 新ID组起始时重置前一行变量 */ if first.ID then prev_var1 = .; /* 判断当前行是否为重复日期的后续行,且前一行Variable1缺失 */ if not first.Date and prev_var1 = . then Index = .; /* 更新前一行Variable1为当前行的值,供下一行判断使用 */ prev_var1 = Variable1; run;
代码逻辑说明
- 使用
by ID Date按ID和日期分组,借助first.标识符识别分组起始位置 - 用
retain语句保留上一行的Variable1值,避免每次循环自动重置 - 进入新的
ID组时,重置prev_var1为缺失,保证分组间判断独立 - 若当前行不是该日期的第一行(即重复日期的后续行),且前一行
Variable1缺失,则将当前行Index设为缺失 - 每次循环结束前更新
prev_var1为当前行的Variable1值,为下一行判断提供依据
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

