如何在SAS中分组验证变量递增关系并标记异常记录
SAS分组验证rate随class递增的实现方法
实现思路
按group分组后,利用SAS的by语句处理分组逻辑,结合lag()函数获取组内上一行的class和rate值,对比当前行与上一行的数值关系,判断是否出现class升高但rate未升高的异常情况,最终生成标记列标注结果。
代码实现
/* 测试数据集(已提供) */ data work.tst; input group class rate; cards; 1 1 0.1 1 2 0.5 1 3 0.45 1 4 0.7 2 1 1 2 2 2 2 3 4 2 4 6 ; run; /* 生成含异常标记的数据集 */ data work.tst_check; set work.tst; by group; /* 获取上一行的class和rate数值 */ prev_class = lag(class); prev_rate = lag(rate); /* 定义标记变量长度并初始化 */ length flag $10; flag = '正常'; /* 分组首行重置前置变量,避免跨组干扰 */ if first.group then do; call missing(prev_class, prev_rate); end; /* 从分组第二行开始判断异常 */ if not first.group then do; /* 当class递增但rate未递增时标记异常 */ if class > prev_class and rate <= prev_rate then do; flag = '异常'; end; end; /* 丢弃临时变量 */ drop prev_class prev_rate; run;
结果说明
运行上述代码后,work.tst_check数据集中会新增flag列:
- group1的第三行(class=3,rate=0.45)因
class从2升至3,但rate从0.5降至0.45,会被标记为异常; - 其余行均满足
class递增时rate也递增的要求,标记为正常。
内容的提问来源于stack exchange,提问作者dalab
相关产品推荐
相关产品推荐

