楼主: millet275
3659 5

求助 根据连续缺失值数量填充缺失值 [推广有奖]

  • 1关注
  • 0粉丝

初中生

52%

还不是VIP/贵宾

-

威望
0
论坛币
26 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
307 点
帖子
11
精华
0
在线时间
18 小时
注册时间
2014-4-3
最后登录
2017-9-15

10论坛币
google了网上好多都是以前一个观测值或者后一个观测值来填充缺失值的。 但是手头有一坨数据,要求如果 连续缺失值个数小于四个则按照下一个非缺失值的数值填充, 如果连续缺失值的个数大于4, 则 按照上一个非缺失值与下一个非缺失值的平均数填充。求帮助 毕业论文数据清理不出来好急啊。 只有10个论坛币 但是如果有什么需要的英文的论文和书籍我可以用图书馆资源帮您查找

sales         填充后        sales
3                                    3
4                                    4
.                                     5
.                                     5
.                                     5
5                                    5
1                                    1
.                                     4.5
.                                     4.5
.                                     4.5
.                                     4.5
.                                     4.5
8                                    8
关键词:缺失值 10个论坛币 Google sales 图书馆资源 google 毕业论文 图书馆 平均数 英文

回帖推荐

yongyitian 发表于5楼  查看完整内容

估计是双击打开数据集后, 显示列的宽度太小,与数据格式无关。变量太多的话,可能会显示不出来。 Excel 经常出现这种情况。
沙发
yongyitian 发表于 2015-6-2 19:28:34 |只看作者 |坛友微信交流群
  1. data a;
  2. input sales;
  3. datalines;
  4. 3
  5. 4
  6. .
  7. .
  8. .
  9. 5
  10. 1
  11. .
  12. .
  13. .
  14. .
  15. .
  16. 8
  17. ; run;

  18. data b;
  19.    set a;
  20.    retain gp 0;
  21.     n = _n_ ;
  22.    sale_lag = lag(sales);
  23.    if missing(sale_lag) ^= missing(sales) then gp+1;
  24.    drop sale_lag;
  25. run;

  26. data want;
  27.     retain last_nonMiss;
  28.     count_missing = 0;

  29.     do until(last.gp);
  30.       set b;
  31.       by gp;
  32.           
  33.        if ^missing(sales) then do;
  34.          if last.gp then  last_nonMiss = sales;   
  35.          output;
  36.        end;

  37.        if missing(sales) then do;
  38.            count_missing + 1;
  39.        end;
  40.      end;
  41.   
  42.      if count_missing > 0 then do;
  43.          do until(last.gp);
  44.            nmiss = count_missing;
  45.            last_sale = last_nonMiss;
  46.            output;
  47.          end;
  48.      end;
  49.     keep sales n nmiss last_sale;
  50. run;

  51. proc sort data=want out=want_sort;
  52.     by descending n;
  53. run;

  54. data wanted;   /* need to be sorted in reverse order */
  55.      set want_sort;
  56.          next_sale = lag(sales);
  57.          if ^missing(sales) then output;
  58.          if missing(sales) then do;
  59.            if nmiss > 4 then do;
  60.               do i = 1 to nmiss;
  61.                sales = (last_sale+next_sale)/2;
  62.                output;
  63.               end;
  64.            end;
  65.            if nmiss <= 4 then do;
  66.               do i = 1 to nmiss;
  67.                  sales = next_sale;
  68.                  output;
  69.               end;
  70.            end;
  71.          end;
  72.    keep sales;
  73. run;

  74. /* the results need to be sorted in reverse order */
复制代码

使用道具

藤椅
Imasasor 发表于 2015-6-2 22:05:55 |只看作者 |坛友微信交流群
这个好有挑战性,期待高手

使用道具

板凳
millet275 发表于 2015-6-4 05:22:48 |只看作者 |坛友微信交流群
yongyitian 发表于 2015-6-2 19:28
太感谢了! 但是有个问题, 因为我的真实数据有65兆, 在 _n_之后查看结果 n 只能显示前到10 后面都是星号, 重新给n 设了格式发现还是不行,也不能利用n进行排序。 请问这个是怎么回事呀? 最后我是在excel的原始文件里手工拉了一排n出来代替的

使用道具

报纸
yongyitian 发表于 2015-6-4 07:45:13 |只看作者 |坛友微信交流群
millet275 发表于 2015-6-4 05:22
太感谢了! 但是有个问题, 因为我的真实数据有65兆, 在 _n_之后查看结果 n 只能显示前到10 后面都是星号 ...
估计是双击打开数据集后, 显示列的宽度太小,与数据格式无关。变量太多的话,可能会显示不出来。 Excel 经常出现这种情况。

使用道具

地板
millet275 发表于 2015-6-6 16:23:04 |只看作者 |坛友微信交流群
yongyitian 发表于 2015-6-4 07:45
估计是双击打开数据集后, 显示列的宽度太小,与数据格式无关。变量太多的话,可能会显示不出来。 Excel  ...
O(∩_∩)O谢谢

使用道具

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

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

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

GMT+8, 2024-4-26 11:54