使用FIRST.var选择记录组

时间:2012-10-12 12:42:44

标签: sas

我的数据集是:

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行)。谢谢!

2 个答案:

答案 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;