楼主: 一眼瞬间
4200 11

[问答] 技术性问题,不知道怎么填补缺失值?数据结构内详 [推广有奖]

  • 0关注
  • 1粉丝

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
730 个
通用积分
0.0001
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
903 点
帖子
376
精华
0
在线时间
309 小时
注册时间
2010-3-14
最后登录
2023-8-19

楼主
一眼瞬间 发表于 2010-12-23 11:14:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
ID              YEAR code1
00109        1996  5013  
00109        1997  5013  
00109        1998  5013  
00109       1999    .   
00109       2000    .   
00109       2001    .   
00109       2002  6500  
00109       2003    .   
00109       2004    .   
00109       2005    .   
00109       2006    .   
00109       2007    .   
00109       2008    .   
00109       2009    .  
00108       1996    .
00108       1997    5000
00108       1998    .
00108       1999    .


需要把00109的1999到2001年的ID用5013补上(就是缺失值上面的数据,前提是同一个ID,不是的话就让它空着);
2003到2009的用6500补上;

对于00108,因为第一个是缺失的,没法补,1998-1999年的用1997年的5000补上。


数据结构大概如上,不知道有没什么比较好的方法可以补上?

先谢过了。
二维码

扫码加我 拉你入群

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

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

关键词:数据结构 性问题 缺失值 不知道 技术性 缺失 技术性 数据结构 内详

回帖推荐

elek.me 发表于3楼  查看完整内容

利用 by statement 结合 first.varname 变量:

本帖被以下文库推荐

沙发
一眼瞬间 发表于 2010-12-23 11:15:22
发现我等级成博士生了~~~

藤椅
elek.me 发表于 2010-12-23 14:22:46
利用 by statement 结合 first.varname 变量:
  1. data have;
  2.         input id year code1;
  3. cards;
  4. 00109        1996  5013  
  5. 00109        1997  5013  
  6. 00109        1998  5013  
  7. 00109       1999    .   
  8. 00109       2000    .   
  9. 00109       2001    .   
  10. 00109       2002  6500  
  11. 00109       2003    .   
  12. 00109       2004    .   
  13. 00109       2005    .   
  14. 00109       2006    .   
  15. 00109       2007    .   
  16. 00109       2008    .   
  17. 00109       2009    .  
  18. 00108       1996    .
  19. 00108       1997    5000
  20. 00108       1998    .
  21. 00108       1999    .
  22. ;

  23. data want;
  24.         set have;
  25.         retain code .;
  26.         by id notsorted;
  27.         if first.id then code=.;
  28.         code=ifn(lag(code1)=. or first.id,code,lag(code1));
  29.         code1=ifn(code1=.,code,code1);
  30.         drop code;
  31. run;
复制代码
已有 2 人评分经验 学术水平 热心指数 收起 理由
peijiamei + 100 + 3 + 2 精彩帖子
一眼瞬间 + 1 + 1 说的很好哦

总评分: 经验 + 100  学术水平 + 4  热心指数 + 3   查看全部评分

我的博客: http://elek.me/sas
联系我: http://about.me/elek

板凳
一眼瞬间 发表于 2010-12-24 02:25:09
3# elek.me

感谢elek,it works well:)

报纸
elek.me 发表于 2010-12-24 09:15:56
不客气。

对于00108,因为第一个是缺失的,没法补,

你的这一条,如果不限定,或者说,00108对应的1996需要补成5000的话,其实就是相当于按一个step function的方式来补充缺失值了,这样的话,倒是有更方便的方法,用proc expand,SAS/ETS里一个非常实用的过程步,方法如下:
  1. data have;
  2.         input id year code1;
  3. cards;
  4. 00109        1996  5013  
  5. 00109        1997  5013  
  6. 00109        1998  5013  
  7. 00109       1999    .   
  8. 00109       2000    .   
  9. 00109       2001    .   
  10. 00109       2002  6500  
  11. 00109       2003    .   
  12. 00109       2004    .   
  13. 00109       2005    .   
  14. 00109       2006    .   
  15. 00109       2007    .   
  16. 00109       2008    .   
  17. 00109       2009    .  
  18. 00108       1996    .
  19. 00108       1997    5000
  20. 00108       1998    .
  21. 00108       1999    .
  22. ;


  23. proc expand data=have out=want method=step extrapolate;
  24.         by descending id;
  25.         id year;
  26.         convert code1 ;
  27. run;
复制代码
已有 1 人评分经验 学术水平 热心指数 收起 理由
peijiamei + 100 + 3 + 3 精彩帖子

总评分: 经验 + 100  学术水平 + 3  热心指数 + 3   查看全部评分

我的博客: http://elek.me/sas
联系我: http://about.me/elek

地板
一眼瞬间 发表于 2010-12-24 13:11:31
elek.me 发表于 2010-12-24 09:15
不客气。

对于00108,因为第一个是缺失的,没法补,

你的这一条,如果不限定,或者说,00108对应的1996需要补成5000的话,其实就是相当于按一个step function的方式来补充缺失值了,这样的话,倒是有更方便的方法,用proc expand,SAS/ETS里一个非常实用的过程步,方法如下:
  1. data have;
  2.         input id year code1;
  3. cards;
  4. 00109        1996  5013  
  5. 00109        1997  5013  
  6. 00109        1998  5013  
  7. 00109       1999    .   
  8. 00109       2000    .   
  9. 00109       2001    .   
  10. 00109       2002  6500  
  11. 00109       2003    .   
  12. 00109       2004    .   
  13. 00109       2005    .   
  14. 00109       2006    .   
  15. 00109       2007    .   
  16. 00109       2008    .   
  17. 00109       2009    .  
  18. 00108       1996    .
  19. 00108       1997    5000
  20. 00108       1998    .
  21. 00108       1999    .
  22. ;


  23. proc expand data=have out=want method=step extrapolate;
  24.         by descending id;
  25.         id year;
  26.         convert code1 ;
  27. run;
复制代码
原来expand 那么实用,学习了!!!如果碰到其他数据特征,用这个expand正好。
谢谢:)

7
一眼瞬间 发表于 2010-12-24 13:17:35
elek.me 发表于 2010-12-24 09:15
不客气。

对于00108,因为第一个是缺失的,没法补,

你的这一条,如果不限定,或者说,00108对应的1996需要补成5000的话,其实就是相当于按一个step function的方式来补充缺失值了,这样的话,倒是有更方便的方法,用proc expand,SAS/ETS里一个非常实用的过程步,方法如下:
  1. data have;
  2.         input id year code1;
  3. cards;
  4. 00109        1996  5013  
  5. 00109        1997  5013  
  6. 00109        1998  5013  
  7. 00109       1999    .   
  8. 00109       2000    .   
  9. 00109       2001    .   
  10. 00109       2002  6500  
  11. 00109       2003    .   
  12. 00109       2004    .   
  13. 00109       2005    .   
  14. 00109       2006    .   
  15. 00109       2007    .   
  16. 00109       2008    .   
  17. 00109       2009    .  
  18. 00108       1996    .
  19. 00108       1997    5000
  20. 00108       1998    .
  21. 00108       1999    .
  22. ;


  23. proc expand data=have out=want method=step extrapolate;
  24.         by descending id;
  25.         id year;
  26.         convert code1 ;
  27. run;
复制代码
刚又非常八卦得去了你的SAS博客。。。。。原来今天冬至。。。偶也该打电话回家了

8
一眼瞬间 发表于 2010-12-24 13:19:18
7# 一眼瞬间

不好意思,看错了,才发现冬至过去好几天了。。。

9
elek.me 发表于 2010-12-24 13:36:34
呼呼。   我这里现在下雪了。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

10
snk0_0 发表于 2012-9-25 19:30:19
大侠们能详解下么?
proc expand data=have out=want method=step extrapolate;
        by descending id;
        id year;
        convert code1 ;
run;

expand是做什么用的?
data=have out=want method=step 什么意思?

by descending id;
id year; 这两句和iD有什么关系。。。。求解释下语句之间表达的意思~!谢谢了大神们~!

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

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