楼主: lemonxinran
1446 3

sas缺失值替补 [推广有奖]

  • 0关注
  • 1粉丝

已卖:2份资源

讲师

30%

还不是VIP/贵宾

-

威望
0
论坛币
1155 个
通用积分
6.0000
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
10334 点
帖子
188
精华
0
在线时间
605 小时
注册时间
2010-10-25
最后登录
2025-4-2

楼主
lemonxinran 发表于 2013-4-23 15:52:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有一组数据,country,year,corruption.
部分数据如下:
country year corruption
CHE  2010 5
CHE  2009 8
CHE  2008 .
CHE  2007 .
CHE  2005 .
CAN  2010 .
CAN  2009  5
CAN  2008  .
CAN  2007  6
现在需要对于每一个country;用最近的非缺失值填补缺失值。首选用年份大的数据填补年份小的缺失值。如果大于其的年份也是缺失值时,使用最近的年份小的数据填补。也即2010年时缺失值时,就用2009年填补。如果2009年缺失,就用2008年填补2009和2010的缺失值。但是如果2009年和2007年都存在数据时,用2009年填补2008年的缺失值。
上表补完应为:
country year corruption
CHE  2010 5
CHE  2009 8
CHE  2008 8
CHE  2007 8
CHE  2005 8
CAN  2010 5
CAN  2009  5
CAN  2008  5
CAN  2007  6

这个在sas中如何实现呢?谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:缺失值 CORRUPTION Country Corrupt Count corruption country

沙发
moyunzheng 发表于 2013-4-23 17:12:05
  1. DATA TEST;
  2. INPUT country $ year corruption;
  3. CARDS;
  4. CHE  2010 5
  5. CHE  2009 8
  6. CHE  2008 .
  7. CHE  2007 .
  8. CHE  2005 .
  9. CAN  2010 .
  10. CAN  2009  5
  11. CAN  2008  .
  12. CAN  2007  6
  13. ;
  14. RUN;
  15. PROC SORT DATA=TEST;BY country DESCENDING  year;RUN;

  16. DATA TEST;
  17. RETAIN _Max_Year _max_value;
  18. SET TEST;
  19. by  country;
  20. if first.country then do;_Max_Year=.;_max_value=.;end;
  21. if corruption ne . then do;_Max_Year=year;_max_value=corruption;end;
  22. run;

  23. PROC SORT DATA=TEST;BY country year;RUN;

  24. DATA TEST;
  25. RETAIN _Min_Year _min_value;
  26. SET TEST;
  27. by country;
  28. if first.country then do;_Min_Year=.;_min_value=.;end;
  29. if corruption ne . then do;new_corruption=corruption; _Min_Year=year;_min_value=corruption;end;
  30. else do;
  31.                 if _Min_Year=. and _Max_Year=. then do;new_corruption=.;new_year=.;end;
  32.                 else if _Min_Year=. then do;new_corruption=_max_value;new_year=_Max_Year ;end;
  33.                 else if _Max_Year=. then do;new_corruption=_min_value;new_year=_Min_Year ;end;
  34.                 else if (_Max_Year-year)<=(year-_Min_Year) then do;new_corruption=_max_value;new_year=_Max_Year ;end;
  35.                 else do;new_corruption=_min_value;new_year=_Min_Year ;end;
  36.                 end;
  37. drop _:;
  38. run;
复制代码

藤椅
lemonxinran 发表于 2013-4-23 20:51:24
moyunzheng 发表于 2013-4-23 17:12
非常感谢!

板凳
lemonxinran 发表于 2013-4-23 20:51:28
moyunzheng 发表于 2013-4-23 17:12
非常感谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 14:19