使用SAS Do循环筛选comp1-comp10含36的记录并生成新表
SAS带Do循环筛选记录的程序实现
原始SAS数据集结构及数据如下:
id comp1 comp2 comp3 comp4 comp5 1 12 14 45 78 74 2 25 45 36 88 45
实现代码
/* 读取原始数据集,假设原始数据集名为original_data */ data filtered_data; set original_data; /* 定义临时变量标记是否符合筛选条件 */ keep_flag = 0; /* Do循环遍历comp1至comp10变量 */ do i = 1 to 10; /* 动态生成变量名并检查值是否为36 */ if vvaluex(cats('comp', i)) = '36' then do; keep_flag = 1; leave; /* 找到符合条件的变量后立即退出循环,提升效率 */ end; end; /* 仅保留符合条件的记录 */ if keep_flag = 1; /* 删除临时变量,避免进入新数据集 */ drop i keep_flag; run;
代码说明
- 用
do i = 1 to 10遍历目标变量组,覆盖comp1到comp10 cats('comp', i)动态拼接变量名,vvaluex()函数根据拼接后的名称获取变量值,完成与36的匹配keep_flag作为筛选标记,找到匹配项后设为1并退出循环,减少不必要的遍历- 最后通过
if keep_flag = 1筛选出符合要求的记录,生成新数据集filtered_data
内容的提问来源于stack exchange,提问作者lal
相关产品推荐
相关产品推荐

