SAS中的平衡面板数据到平衡面板数据
在SAS 9.2中,我目前正在使用面板数据集。我有一个变量表示年份,一个变量表示个人。有些人并不是每年都出现,我想把这些观察结果去掉。它的简化版本如下所示:SAS中的平衡面板数据到平衡面板数据,sas,Sas,在SAS 9.2中,我目前正在使用面板数据集。我有一个变量表示年份,一个变量表示个人。有些人并不是每年都出现,我想把这些观察结果去掉。它的简化版本如下所示: 人年 2008年1月 2009年1月 2010年1月 2008年2月 2010年2月 2008年3月 2009年3月 2010年3月 所以在这种情况下,我想保留第1个和第3个人物,或者说其他,我想删除第二个人物,因为他不是每年都出现 我希望这是有意义的 谢谢我认为最简单的方法是在PROC SQL中使用子查询进行查询: data have;
谢谢我认为最简单的方法是在PROC SQL中使用子查询进行查询:
data have;
input person year;
datalines;
1 2008
1 2009
1 2010
2 2008
2 2010
3 2008
3 2009
3 2010
;
run;
proc sql noprint;
create table want as
select *
from have
where person in
(select person
from have
group by person
having min(year)=2008 and max(year)=2010 and count(distinct year)=3);
quit;
如果整个数据集的最小年数和最大年数是固定的,则可以删除HAVING子句中的前两个条件,并只保留COUNT(DISTINCT…。数据步骤解决方案,其功能与SQL几乎相同:
data have;
input person year;
datalines;
1 2008
1 2009
1 2010
2 2008
2 2010
3 2008
3 2009
3 2010
;
run;
data want;
do _n_ = 1 by 1 until (last.person);
set have;
by person;
if year ge 2008 and year le 2010 then yearcount+1;
end;
do _n_ = 1 by 1 until (last.person);
set have;
by person;
if yearcount=3 then output;
end;
yearcount=0;
run;