我的数据集是:
ID AGE
1 65
1 66
1 67
1 68
1 69
1 70
1 71
2 70
2 71
2 72
3 68
3 69
3 70
[...]
我的(基本)问题是:哪个是获取ID记录以65 <= AGE <= 68
开头的数据集的最直接方式? (在上面的例子中我想获得前7行和后3行)。谢谢!
答案 0 :(得分:2)
只是有另一种方法......
proc sql;
delete from input_dataset I where not exists
(select 1 from input_dataset D where I.id=D.id having 65 le min(age) le 68);
quit;
如果要创建新数据集,相同的基本查询将作为SELECT的一部分工作,反转NOT。
答案 1 :(得分:1)
data input_dataset;
input ID AGE;
cards;
1 65
1 66
1 67
1 68
1 69
1 70
1 71
2 70
2 71
2 72
;
run;
proc sort data=input_dataset out=sorted;
by ID;
run;
data work.first_age65to68;
set sorted;
retain keepit 0;
by ID;
if first.ID then do;
if AGE ge 65 and AGE le 68 then keepit=1;
else keepit=0;
end;
if keepit;
drop keepit;
run;