楼主: wanzionline
6522 13

SAS数据补齐 [推广有奖]

  • 0关注
  • 2粉丝

本科生

39%

还不是VIP/贵宾

-

威望
0
论坛币
6888 个
通用积分
0.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1015 点
帖子
86
精华
0
在线时间
71 小时
注册时间
2011-10-26
最后登录
2021-1-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请各位高手指教,困扰了我2天了,找不到什么好方法。数据实例:
  task_id                     date         var1    var2    var3
  2010-11-30        2012-3-31      aaa      bbb     ccc
  2011-05-31        2012-3-31      aaa      bbb     ccc
  2011-08-31        2012-3-31      aaa      eee     ccc
  2012-03-31        2012-3-31      aaa      bbb     ccc
具体问题:“task_id”为上报日期,本来应当一个月上报一次,也就是从2010年11月至今共计应当有17条,但是由于上报数据缺失,现在想将缺失的数据补齐。
补齐规则为:下一个月的数据除了task_id延后一月其他都与上月相同。例如
   task_id                    date          var1    var2    var3
2010-11-30        2012-3-31      aaa      bbb     ccc
  2010-12-31        2012-3-31      aaa      bbb     ccc
         ..........
2011-08-31        2012-3-31      aaa      eee     ccc
  2012-09-30        2012-3-31      aaa      eee     ccc
        .........
2012-03-31        2012-3-31      aaa      bbb     ccc
另:数据量非常大,最好是批量解决的办法。。。。(好像是废话)
二维码

扫码加我 拉你入群

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

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

关键词:Task date 数据缺失 VaR TAS

回帖推荐

可~乐 发表于11楼  查看完整内容

沙发
nectar 发表于 2013-3-13 10:21:33 |只看作者 |坛友微信交流群
按task_id排序,再使用retain语句就可以解决问题啦。搜搜论坛上有如何补全missing value的sample code。

使用道具

藤椅
可~乐 发表于 2013-3-13 10:43:35 |只看作者 |坛友微信交流群
  1. data test1;
  2. do i=1 to 17;
  3. task_id=intnx('month','31oct2010'd,i,'e');
  4. output;
  5. end;
  6. format task_id yymmdd10.;
  7. drop i;
  8. run;

  9. data test2;
  10. input task_id yymmdd10. date yymmdd10. var1 $ var2 $ var3 $;
  11. format task_id yymmdd10. date yymmdd10.;
  12. cards;
  13. 2010-11-30 2012-3-31 aaa bbb ccc
  14. 2011-05-31 2012-3-31 aaa bbb ccc
  15. 2011-08-31 2012-3-31 aaa eee cc
  16. 2012-03-31 2012-3-31 aaa bbb ccc
  17. ;

  18. data test3;
  19.         merge test1 test2;
  20.         by task_id;
  21.         retain date_new var1_new var2_new var3_new;
  22.                 if date^=. then date_new=date;
  23.                 array temp1(3) var1-var3;
  24.                 array temp2(3) $ var1_new var2_new var3_new;
  25.                 do i=1 to 3;
  26.                         if temp1(i)^="" then  temp2(i)=temp1(i);
  27.                 end;
  28.         drop i date  var1 var2  var3 ;
  29.         format date_new yymmdd10.;
  30.         rename date_new=date var1_new=var1 var2_new=var2 var3_new=var3;
  31. run;
复制代码
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 100 + 100 + 2 + 1 + 2 分析的有道理

总评分: 经验 + 100  论坛币 + 100  学术水平 + 2  热心指数 + 1  信用等级 + 2   查看全部评分

使用道具

板凳
wanzionline 发表于 2013-3-13 11:31:17 |只看作者 |坛友微信交流群
首先感谢二位的指导。我找了找论坛上的missing  value处理,还没有太明白,呵呵!
可乐兄的方法我试了,对于我的例子来说是可以的;可能我的例子有点过于简化,现在附上一部分经过修改的数据,请各位再帮忙想想办法啊!!!
task_iddatevar1var2var3

2007/10/31

2008/12/31

366010

6506263N200700425

2009/5/29

2009/10/31

2009/12/31

2316010

HO650720000200900021

2012/5/13

2011/2/28

2011/4/30

5882654

544126

2015/12/21

2011/2/28

2011/4/30

5882654

6441040

2015/12/21

2007/5/31

2007/7/31

593722

1028129

2008/1/31

2007/9/31

2007/12/31

593722

1028129

2008/1/11

2007/5/31

2007/7/31

593722

1028129

2007/12/8

2007/5/31

2007/7/31

593722

1028236

2007/11/12

2007/5/31

2007/12/31

593722

2023509

2007/9/25

2007/5/31

2007/7/31

593722

6054504

2007/10/9

2007/5/31

2007/7/31

593722

6054721

2007/10/10

2007/5/31

2007/7/31

593722

6054808

2007/10/11

2007/5/31

2007/7/31

593722

6058092

2007/10/26

2007/5/31

2007/8/31

593722

6060651

2007/11/8

2009/11/30

2010/1/31

593722

9500660

2012/12/31

使用道具

报纸
可~乐 发表于 2013-3-13 12:10:23 |只看作者 |坛友微信交流群
wanzionline 发表于 2013-3-13 11:31
首先感谢二位的指导。我找了找论坛上的missing  value处理,还没有太明白,呵呵!
可乐兄的方法我试了,对 ...
这个没多大区别吧,就是多了一些重复的记录,可是不管怎样,只要是缺失的,都会以最近一次的月份数值来补全。。。

使用道具

地板
matchlessboy 发表于 2013-3-13 12:13:17 |只看作者 |坛友微信交流群
楼上 可乐 的办法不是挺好的吗? 具体有什么不能实现的吗?

使用道具

7
playmore 发表于 2013-3-13 12:31:58 |只看作者 |坛友微信交流群
这种关于时间序列补全的可以用proc timeseries来做下面写得不一定对,关于accumulate和setmissing的设置可以上网查一下

  1. proc timeseries data=test out=want;
  2.         id date interval=month accumulate=last setmissing = last;
  3.         var price;
  4.         by task_id;
  5.         format date date9.;
  6. run;
复制代码

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 100 + 100 + 3 + 2 + 2 精彩帖子

总评分: 经验 + 100  论坛币 + 100  学术水平 + 3  热心指数 + 2  信用等级 + 2   查看全部评分

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

8
wanzionline 发表于 2013-3-13 13:11:43 |只看作者 |坛友微信交流群
可~乐 发表于 2013-3-13 12:10
这个没多大区别吧,就是多了一些重复的记录,可是不管怎样,只要是缺失的,都会以最近一次的月份数值来补 ...
do i=1 to 17;
这里的“i”怎么确定呢?
var1+var2是用来分类的。
例如 var1=366010 var2=6506263N200700425为一组,那么i=14,
但是对于var1=593722 var2=1028129的那一组,i=8.
我理解您的方法对于某一组来说,是没问题的。但是对于多组数据来说,i  如何能够在data test1中变化呢?主要是这里我搞不明白,可否再详细点解释?

使用道具

9
可~乐 发表于 2013-3-13 13:24:27 |只看作者 |坛友微信交流群
噢,貌似理解你的意思了,以var1+var2为分组变量,补全所有组的所有每个月日期?

使用道具

10
wanzionline 发表于 2013-3-13 13:25:52 |只看作者 |坛友微信交流群
可~乐 发表于 2013-3-13 13:24
噢,貌似理解你的意思了,以var1+var2为分组变量,补全所有组的所有每个月日期?
对,就是这个意思,如何批量补全所有组里边的观测?我头都快大了。

使用道具

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

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

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

GMT+8, 2024-11-6 05:27