楼主: zs694461601
7293 25

[有偿编程] 怎样找出数据缺失的股票 [推广有奖]

21
learsaas 发表于 2014-4-22 14:22:22 |只看作者 |坛友微信交流群
都写的太复杂了,一个很步简单的data步就可以搞定了,呵呵

使用道具

22
congmu 发表于 2014-5-3 19:13:49 |只看作者 |坛友微信交流群
zhengbo8 发表于 2013-1-22 14:34
不用宏、SQL,下面的data步方法:

在数据集中创建一个标示标量 is_missing,判断该条观测是否为缺失值的 ...
这个好

使用道具

23
jeozu 发表于 2014-5-8 17:19:07 |只看作者 |坛友微信交流群
learsaas 发表于 2014-4-22 14:22
都写的太复杂了,一个很步简单的data步就可以搞定了,呵呵
尝试一下:
  1. data a;
  2.     set data1;
  3.     by stk;
  4.     dt=ymd(input(substr(ym,1,4)), input(substr(ym,5,2)),1);
  5.     if fist.stk then do;
  6.            _dt=dt;
  7.              i=0;
  8.            end;
  9.     _dt=intnx('month',_dt, i);
  10.     do while(dt != _dt);
  11.         output;
  12.         i+1;
  13.         _dt=intnx('month',_dt, i);
  14.     end;
  15.     i+1;
  16.     return;
  17.     keep stk _dt;
  18. run;
复制代码
看似代码少,其实很容易错。感觉跟写C和perl一样。不是高频数据,用上边说过的先建立一个perfect主表,left join实际数据,找出缺失值输出来简单可靠。。
已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

使用道具

24
farmman60 发表于 2014-5-11 05:56:43 |只看作者 |坛友微信交流群
learsaas 发表于 2014-4-22 14:22
都写的太复杂了,一个很步简单的data步就可以搞定了,呵呵
  1. data a;
复制代码

使用道具

25
farmman60 发表于 2014-5-11 06:35:25 |只看作者 |坛友微信交流群
farmman60 发表于 2014-5-11 05:56
  1. data a;
  2. input stock $8. @13 month yymmn6. @24 index 8.4;
  3. format month yymmn6.;
  4. datalines;
  5. 000001      192801     0.3
  6. 000001      192802     0.4
  7. 000001      192803     0.3
  8. 000001      192804     0.4
  9. 000001      192805     0.3
  10. 000001      192806     0.4
  11. 000001      192807     0.3
  12. 000001      192809     0.4
  13. 000002      192801     0.3
  14. 000002      192802     0.8
  15. 000002      192804     0.4
  16. 000002      192805     0.3
  17. 000002      192806     0.4
  18. 000002      192807     0.3
  19. 000002      192808     0.4
  20. ;
  21. run;

  22. data want;
  23. merge a a(firstobs=2 keep=stock month rename=(stock=_stock month=_month));;
  24. output;
  25. if stock=_stock then do;
  26.           if _month-month>1 then do;
  27.    do i=1 to intck('month',month,_month)-1;
  28.    month=intnx('month',month,i);
  29.    call missing(index);
  30.    output;
  31. end;
  32. end;
  33. end;
  34. drop _stock _month i;
  35. run;
复制代码

使用道具

26
zhanglianbo35 发表于 2014-7-21 20:12:59 |只看作者 |坛友微信交流群
其实这个很简单,转置一下就行了;
data a;
input stk $ time $ c ;
cards;
000001      192801     0.3
000001      192802     0.4
000001      192803     0.3
000001      192804     0.4
000001      192805     0.3
000001      192806     0.4
000001      192807     0.3
000001      192809     0.4
000002      192801     0.3
000002      192802     0.8
000002      192804     0.4
000002      192805     0.3
000002      192806     0.4
000002      192807     0.3
000002      192808     0.4
;
run;

proc sort data= a out=b ;
  by  stk time;
run;

proc transpose data=b out=c name= var label= varlist ;
  id time;
  by stk;
  var c;
run;
无标题2.png
proc transpose data=c out=d (rename=(_name_=time col1=C));
  by stk ;
  var _:;
run;

data final;
  set d;
  time= strip(tranwrd(time,'_',''));
  label time= 'Time';
run;
无标题.png

已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-28 15:17