SAS中的平衡面板数据与平衡面板数据不平衡

时间:2014-01-12 01:19:10

标签: sas

在SAS 9.2中,我目前正在使用面板数据集。我有一个变量说明年份和变量说明个人。有些人每年都没有出现,我想摆脱这些观察。它的简化版本看起来像这样:

  1. 人年
  2. 1 2008
  3. 1 2009
  4. 1 2010
  5. 2 2008
  6. 2 2010
  7. 3 2008
  8. 3 2009
  9. 3 2010
  10. 所以在这种情况下,我想保留第1和第3人或者另外说明,我想删除第二个人,因为他不会每年都出现。

    我希望这是有道理的。

    由于

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用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 ...)。

答案 1 :(得分:0)

数据步骤解决方案,其功能几乎与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;