如何根据逐个组内的观察(行)数放弃观察?

时间:2015-01-07 23:51:23

标签: sas

在Stata,我可以这样做:

bysort group_var: drop if _n > 6

仅保留group_var指定的每组中的前六个观察。我如何在SAS中执行此操作?

我试过了:

proc sort data=indata out=sorted_data;
    by group_var;
run;

data outdata;
    set sorted_data;
    by group_var;
    if (_n_ > 6) then delete;
run;

但是这会删除整个数据集中除了前6个观察之外的所有观察结果(总共只留下6个观察结果)。

1 个答案:

答案 0 :(得分:6)

您需要按组计算每个记录。

data outdata;
   set sorted_data;
   by group_var;
   retain count;

   if first.group_var then
      count = 0;

   count = count + 1;
   if count > 6 then delete;

   drop count;
run;