楼主: huanggg11
1081 4

新手求教。。 [推广有奖]

  • 0关注
  • 0粉丝

初中生

0%

还不是VIP/贵宾

-

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如我现在有两个表第一个表a长这样
stockid       tradedate (变量名)
000001      2008-02-01
000001      2008-02-02
000002      2008-02-01
000002      2008-02-02


另外一个表b
stockid          date1                date2           y
000001      2008-01-31   2008-12-31      10
000001    2008-02-01   2008-12-31      20
000002    2008-01-05    2008-01-31     5
000002    2008-01-20    2008-03-03     4

第一个表能有新的一列变量y
使得 同一个stockid里面 第二个表里面只要满足date1<tradedate<date2 所有值取个平均就等于 这个tradedate对应的y值
就是最终表应该长这样

stockid       tradedate            y
000001      2008-02-01      10
000001      2008-02-02      15  
000002      2008-02-01      4
000002      2008-02-02      4



不知道怎么编程
各位大神求教、、、
二维码

扫码加我 拉你入群

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

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

关键词:新手求教 Traded Stock Trade date

本帖被以下文库推荐

沙发
teqel 发表于 2014-11-30 12:18:13 |只看作者 |坛友微信交流群
  1. data a;
  2. input stockid $ tradedate: yymmdd10.;
  3. format tradedate yymmdd10.;
  4. cards;
  5. 000001      2008-02-01
  6. 000001      2008-02-02
  7. 000002      2008-02-01
  8. 000002      2008-02-02
  9. ;

  10. data b;
  11. input stockid $ date1: yymmdd10. date2: yymmdd10. y;
  12. cards;
  13. 000001    2008-01-31   2008-12-31    10
  14. 000001    2008-02-01   2008-12-31    20
  15. 000002    2008-01-05   2008-01-31     5
  16. 000002    2008-01-20   2008-03-03     4
  17. ;

  18. proc sql;
  19. create table a1 as
  20. select *,
  21. (select mean(y) from b where a.stockid=b.stockid and date1<tradedate<date2) as y
  22. from a;
  23. quit;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 3 + 3 + 3 观点有启发

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

使用道具

藤椅
Tigflanker 发表于 2014-11-30 22:10:02 |只看作者 |坛友微信交流群
  1. data a;
  2. input stockid 1-6 tradedate $ 8-17;
  3. cards;
  4. 000001 2008-02-01
  5. 000001 2008-02-02
  6. 000002 2008-02-01
  7. 000002 2008-02-02
  8. ;run;

  9. data b;
  10. input stockid 1-6 date1 $ 8-17 date2 $ 19-28 y;
  11. cards;
  12. 000001 2008-01-31 2008-12-31 10
  13. 000001 2008-02-01 2008-12-31 20
  14. 000002 2008-01-05 2008-01-31 5
  15. 000002 2008-01-20 2008-03-03 4
  16. ;run;

  17. data need;
  18.   if 0 then set b;
  19.   if _n_ = 1 then do;
  20.     dcl hash h(dataset:'b',multidata:'y');
  21.         h.definekey('stockid');
  22.         h.definedata(all:'y');
  23.         h.definedone();
  24.   end;

  25.   set a;
  26.   sum = 0; count = 0;

  27.   if ~h.find() and date1 < tradedate < date2 then do; sum + y; count + 1; end;

  28.   do rc = h.find_next() while(~rc);
  29.     if date1 < tradedate < date2 then do; sum + y; count + 1; end;
  30.     rc = h.find_next();
  31.   end;
  32.   y = sum / max(count,1);
  33. run;
复制代码

使用道具

板凳
teqel 发表于 2014-11-30 22:26:30 |只看作者 |坛友微信交流群
Tigflanker 发表于 2014-11-30 22:10
hash用的好:)。
原来想着在data step里面再套一个循环,这样做太慢了

使用道具

报纸
Tigflanker 发表于 2014-11-30 23:05:27 |只看作者 |坛友微信交流群
teqel 发表于 2014-11-30 22:26
hash用的好:)。
原来想着在data step里面再套一个循环,这样做太慢了
Hash初学 :)

成组计算果然还是SQL对口,这短短一句真嵌入不少逻辑啊;

这mean、sum等函数印象中都是group by的用法,睡前得再想想。

使用道具

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

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

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

GMT+8, 2024-4-25 22:06