如何根据组内的观察(行)数删除观察?
How do I drop observations based on their observation (row) number within a by group?
在 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;
但这会删除整个数据集中除前六个观测值以外的所有观测值(总共只剩下六个观测值)。
您需要按组统计每个记录。
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;
在 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;
但这会删除整个数据集中除前六个观测值以外的所有观测值(总共只剩下六个观测值)。
您需要按组统计每个记录。
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;