楼主: hello_fj
2681 8

[原创博文] 将缺失值变为某一特定值 [推广有奖]

  • 5关注
  • 1粉丝

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0.0167
学术水平
39 点
热心指数
51 点
信用等级
26 点
经验
5664 点
帖子
133
精华
0
在线时间
365 小时
注册时间
2014-6-8
最后登录
2022-3-24

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币


     在日常数据处理中,缺失值时时刻刻伴随着我们。对于缺失值得处理有很多的技巧。。在这里我先粗略介绍一下再SAS中如何将缺失值转换成某一个特定的字符。一般来说借助数组我们可以达到比较理想的效果。
  1. *step1:data prepare;
  2. data class;
  3.   set sashelp.class;
  4.   if _n_=1 then do;
  5.     Name="";
  6.     Weight=.;
  7.   end;

  8.   if _n_=2 then do;
  9.     Sex="";
  10.     Height=.;
  11.   end;
  12. run;
复制代码
对于数值型的缺失值:
  1. * For numeric;
  2. data Num_missing;
  3.    set class;
  4.    array Nums[*] _numeric_;
  5.    do i = 1 to dim(Nums);
  6.       if Nums[i] =. then Nums[i] =0;
  7.    end;
  8.    drop i;
  9. run;
复制代码
对于字符型的缺失值
  1. *For char missing;
  2. data Char_missing;
  3.    set class;
  4.    array Chars[*] _character_;
  5.    do i = 1 to dim(Chars);
  6.       if Chars[i]="" then Chars[i] = "null";
  7.    end;
  8.    drop i;
  9. run;
复制代码
当然我们有更好的方法一起解决这个问题。
  1. data Covert_missing;
  2.    set class;
  3.    array Chars _character_;
  4.    array Nums _numeric_;

  5.    do over Chars;
  6.       if Chars eq"" then Chars ="null";
  7.    end;
  8.    
  9.    do over Nums;
  10.       if Nums eq . then Nums =0;
  11.    end;
  12. run;
复制代码
    本人初学。。请各位大神指正,拍砖,补充。不甚荣幸!
二维码

扫码加我 拉你入群

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

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

关键词:缺失值 Character missing numeric prepare 技巧 如何

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
愤怒的老鸟 + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

沙发
ljh_9802 发表于 2014-6-10 13:18:26 |只看作者 |坛友微信交流群
不错,见识了……

使用道具

藤椅
420948492 发表于 2014-6-12 12:09:19 |只看作者 |坛友微信交流群
不错,批量处理

使用道具

板凳
420948492 发表于 2014-6-12 12:10:13 |只看作者 |坛友微信交流群
不错,是否可以进一步用数值型用均值替代?实现自动化

使用道具

报纸
hello_fj 发表于 2014-6-12 13:40:13 |只看作者 |坛友微信交流群
420948492 发表于 2014-6-12 12:10
不错,是否可以进一步用数值型用均值替代?实现自动化
用数值型用均值代替?什么意思

使用道具

地板
420948492 发表于 2014-6-12 17:22:47 |只看作者 |坛友微信交流群
hello_fj 发表于 2014-6-12 13:40
用数值型用均值代替?什么意思
数值型缺失值用0替代,容易引起分布的变化,一般用均值替代

使用道具

7
hello_fj 发表于 2014-6-12 18:35:13 |只看作者 |坛友微信交流群
420948492 发表于 2014-6-12 17:22
数值型缺失值用0替代,容易引起分布的变化,一般用均值替代
I think can do like this
  1. data class;
  2.   set sashelp.class;
  3.   if _n_=1 then do;
  4.     Name="";
  5.     Weight=.;
  6.   end;

  7.   if _n_=2 then do;
  8.     Sex="";
  9.     Height=.;
  10.   end;
  11. run;

  12. proc means data=class noprint;
  13. var weight Height;
  14. output out=M_sta mean=M_weight M_Height;
  15. run;

  16. data class;
  17. set class;
  18. id=1;
  19. run;

  20. data M_sta;
  21. set M_sta(keep=M_weight M_Height);
  22. id=1;
  23. run;
  24. data class1;
  25. merge class M_sta;
  26. by id;
  27. drop id;
  28. run;

  29. data Covert_missing;
  30.    set class1;
  31.    array Chars _character_;
  32.    array Nums[2] weight height;
  33.    array t[*] M:;

  34.    do over Chars;
  35.       if Chars eq"" then Chars ="null";
  36.    end;
  37.    
  38.    do i=1 to 2;
  39.       if Nums[i] eq . then Nums[i] =t[i];
  40.    end;
  41.    drop i M:;
  42. run;
复制代码


已有 2 人评分学术水平 热心指数 信用等级 收起 理由
420948492 + 1 + 1 观点有启发
愤怒的老鸟 + 5 + 5 + 5 观点有启发

总评分: 学术水平 + 6  热心指数 + 6  信用等级 + 5   查看全部评分

公众号:SAS与量化投资

使用道具

8
420948492 发表于 2014-6-13 08:49:53 |只看作者 |坛友微信交流群
高手

使用道具

9
hello_fj 发表于 2014-6-13 10:54:56 |只看作者 |坛友微信交流群
420948492 发表于 2014-6-13 08:49
高手
版主过奖了,不过我还是觉得没实现完全自动化,一个是merge的时候,一个是数值变量的个数。不知道版主有什么更好的方法?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 19:09