楼主: funwin
1864 6

[原创博文] 请教高手,如何添加缺失的月份? [推广有奖]

  • 0关注
  • 2粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
2256 点
帖子
192
精华
0
在线时间
131 小时
注册时间
2007-11-7
最后登录
2016-1-22

楼主
funwin 发表于 2010-3-28 01:32:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的数据中,有的公司的数据有丢失的月份,想把这些丢失的月份补充进去,该如何编code?
如下表:
company
date
sales
1001
200509
20
1001
200603
30
1016
200603
451
1016
200606
521
1016
200609
358
1016
2006012
650

增加新的行,至于新增的sales值则设为missing value ‘.’
company
date
sales
1001
200509
20
1001
200510
.
1001
200511
.
1001
200512
.
1001
200601
.
1001
200602
.
1001
200603
30
1016
200603
451
1016
200604
.
1016
200605
.
1016
200606
521
1016
200607
.
1016
200608
.
1016
200609
358
1016
200610
.
1016
200611
.
1016
2006012
650

望指点一二!
二维码

扫码加我 拉你入群

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

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

关键词:请教高手 company missing compan sales 如何

回帖推荐

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

一个笨办法,我觉得可以一个data步搞定,容我再想想

本帖被以下文库推荐

沙发
funwin 发表于 2010-3-28 07:20:46
自己顶一下,例子的数据输入可以:
Data a;
  input company $ date $;
  datalines;
1001 200509
1001 200603
1016 200603
1016 200606
1016 200609
1016 200612
;
run;
日期的调整 可以用:
data b;
set a;
date1=input(compress(date),yymmn6.);
date2=date1;
format date1 yymmn6.;
run;

藤椅
funwin 发表于 2010-3-28 07:25:19
上面的例子中sales忘了写了:
Data a;
  input company date sales;
  datalines;
1001 200509 20
1001 200603 30
1016 200603 451
1016 200606 521
1016 200609 358
1016 200612 650  
;
run;
data b;
set a;
date1=input(compress(date),yymmn6.);
date2=date1;
format date1 yymmn6.;
run;

板凳
funwin 发表于 2010-3-28 21:23:09

RE: 请教高手,如何添加缺失的月份?

can anyone give me any comment? i appreciate your concern.

报纸
soporaeternus 发表于 2010-3-28 22:31:44
  1. data a;
  2.   input company date:yymmn6. sales;
  3.   format date yymmn6.;
  4.   datalines;
  5. 1001 200509 20
  6. 1001 200603 30
  7. 1016 200603 451
  8. 1016 200606 521
  9. 1016 200609 358
  10. 1016 200612 650  
  11. ;
  12. run;

  13. proc sort data=a;by company descending date;run;quit;

  14. data b;
  15.         set a;
  16.         by company descending date;
  17.         D=intck("MONTH",date,lag(date));
  18.         if first.company then D=.;
  19. run;

  20. proc sort data=b;by company date;run;

  21. data c;
  22.         set b;
  23.         by company date;
  24.         if D^=. then do;
  25.         output;
  26.                 do i=1 to D-1 by 1;
  27.                         date=intnx("MONTH",date,1,"BEG");
  28.                         sales=.;
  29.                         output;
  30.                 end;
  31.         end;
  32.         else do;
  33.                 output;
  34.         end;
  35.         keep company date sales;
  36. run;
复制代码
一个笨办法,我觉得可以一个data步搞定,容我再想想

地板
soporaeternus 发表于 2010-3-28 23:30:09
  1. data a;
  2.   input company date:yymmn6. sales;
  3.   format date yymmn6.;
  4.   datalines;
  5. 1001 200509 20
  6. 1001 200603 30
  7. 1016 200603 451
  8. 1016 200606 521
  9. 1016 200609 358
  10. 1016 200612 650  
  11. ;
  12. run;

  13. proc sort data=a;by company date;run;quit;

  14. data b;
  15.         retain Stt_Dte End_Dte ;
  16.         set a;
  17.         by company  date;
  18.         Stt_Dte=lag(date);
  19.         End_Dte=date;
  20.         output;
  21.         if not first.company then do;
  22.                 do i=1 to intck("MONTH",Stt_Dte,End_Dte)-1;
  23.                         date=intnx("MONTH",Stt_Dte,i,"BEG");
  24.                         sales=.;
  25.                         output;
  26.                 end;
  27.         end;
  28.         keep company date sales;
  29. run;

  30. proc sort data=b;by company date;run;quit;
复制代码
一个data步啦,可是最后要多个排序,睡觉去了,哪位高手改改,可以让sales直接赋值给循环最后1条,上面循环多做一次就好了,也就不要排序了
明天来看结果......

7
funwin 发表于 2010-3-29 00:23:56
soporaeternus 发表于 2010-3-28 22:31
  1. data a;
  2.   input company date:yymmn6. sales;
  3.   format date yymmn6.;
  4.   datalines;
  5. 1001 200509 20
  6. 1001 200603 30
  7. 1016 200603 451
  8. 1016 200606 521
  9. 1016 200609 358
  10. 1016 200612 650  
  11. ;
  12. run;

  13. proc sort data=a;by company descending date;run;quit;

  14. data b;
  15.         set a;
  16.         by company descending date;
  17.         D=intck("MONTH",date,lag(date));
  18.         if first.company then D=.;
  19. run;

  20. proc sort data=b;by company date;run;

  21. data c;
  22.         set b;
  23.         by company date;
  24.         if D^=. then do;
  25.         output;
  26.                 do i=1 to D-1 by 1;
  27.                         date=intnx("MONTH",date,1,"BEG");
  28.                         sales=.;
  29.                         output;
  30.                 end;
  31.         end;
  32.         else do;
  33.                 output;
  34.         end;
  35.         keep company date sales;
  36. run;
复制代码
一个笨办法,我觉得可以一个data步搞定,容我再想想
已经满足我所需要的了,非常感谢!
虽然分了步骤,但是非常容易理解!感激不尽!

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

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