如何在SAS中根据另一变量值保留指定数量的记录
SAS数据子集化:按Total保留对应Count范围的记录
核心逻辑
针对每个ID分组,保留Count值处于1到Total区间内的行,直接过滤Count超出该范围的记录。
方案1:DATA步实现
若原始数据未按ID排序,先执行排序操作:
proc sort data=original_data; by ID; run;
再进行子集化处理:
data subset_data; set original_data; by ID; /* 筛选Count在1到Total之间的行 */ if 1 <= Count <= Total; run;
方案2:PROC SQL实现
无需提前排序,直接通过WHERE子句完成过滤:
proc sql; create table subset_data as select * from original_data where Count between 1 and Total; quit;
处理后结果
最终得到的子集数据如下:
| ID | Total | Count | Time |
|---|---|---|---|
| ABC | 2 | 1 | . |
| ABC | 2 | 2 | 00:00 |
| LMN | 3 | 1 | 02:25 |
| LMN | 3 | 3 | 04:45 |
| LMN | 3 | 2 | 07:45 |
内容的提问来源于stack exchange,提问作者Jingxin
相关产品推荐
相关产品推荐

