楼主: janegoodall
3708 12

[求助]merge的问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

85%

还不是VIP/贵宾

-

威望
0
论坛币
95 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
920 点
帖子
74
精华
0
在线时间
59 小时
注册时间
2007-4-25
最后登录
2016-4-16

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币


要被这个数据搞发疯了咯,呜呜呜。。。知道怎么弄的同学帮帮忙吧,谢谢啦~~~

我有两个数据集,一个是每只股票每天的超常收益,另一个是每只股票每年财务表报出日的收益差异数据。我把每只股票每天的数据和当年该只股票财务报表报出日的差异数据合并起来。应该有点没讲明白,大概就是我下面简化的数据的样子。

data1

stock                   date                    abnormalreturn

A                  20040311                      0.11

A                  20040312                      0.1

A                   20040313                     0.2

A                   20040314                     0.1

                        ................

A                   20050318                    0.2

A                    20050319                   0.3

                       .................

B                     .................

data2

stock                 dateann                           dif

A                     20040311                      0.1

A                     20050317                      0.2

A                     20060314                       0.3

                         ....................

B                        ..................

想要合并成的数据是这样的

stock                    date                         dateann                 abnormalreturn             dif

A                         20040311                 20040311                 0.11                           0.1

A                         20040312                  20040311                 0.1                             0.1

A                          20040313                 20040311                  0.2                             0.1

                                  ....................................

谁能帮帮我。。。谢谢谢谢啦

[em01]

[此贴子已经被作者于2009-3-2 10:58:35编辑过]

二维码

扫码加我 拉你入群

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

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

关键词:Merge abnormal normal RETURN Stock Merge

回帖推荐

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

Add a year variable in dataset data1, data2 and condition in where clause. As Shown in the follows.I used informat and format for date variable, so the date looks slightly different.data data1;  informat date yymmdd8.;  input stock $ date abnormalreturn;  year1 = year(date);datalines;A                &nb ...

chengsm13 发表于4楼  查看完整内容

楼主需要首先自己问自己一个问题,在最后的数据集里出现两个日期date何dateann是不是有意义。我觉得完全没有意义。第一步,改名:data2;    set data2;    rename dateann = date;run;第二步,重新排序,proc sort data=data1;    by stock date;run;proc sort data=data2;    by stock date;run;第三步,合并,    data all;     ...

本帖被以下文库推荐

沙发
456852 发表于 2009-3-2 05:28:00 |只看作者 |坛友微信交流群
直接用merge,by stock。

使用道具

藤椅
yongyitian 发表于 2009-3-2 07:43:00 |只看作者 |坛友微信交流群

The following is the SQL inner join.

data data1;
  input stock $ date abnormalreturn;
datalines;
A                  20040311                      0.11
A                  20040312                      0.1
A                   20040313                     0.2
A                   20040314                     0.1
; run;
data data2;
   input stock $ dateann dif;
datalines;
A                     20040311                      0.1
A                     20050317                      0.2
A                     20060314                       0.3
; run;
proc sql;
   select a.stock, date, dateann, abnormalreturn,  dif
   from data1 a, data2 b
   where a.stock=b.stock
   order by a.stock, dateann, date;
quit;

output
 stock         date   dateann  abnormalreturn       dif
-----------------------------------------------------------------
A         20040311  20040311            0.11       0.1
A         20040312  20040311             0.1       0.1
A         20040313  20040311             0.2       0.1
A         20040314  20040311             0.1       0.1
A         20040311  20050317            0.11       0.2
A         20040312  20050317             0.1       0.2
A         20040313  20050317             0.2       0.2
A         20040314  20050317             0.1       0.2
A         20040311  20060314            0.11       0.3
A         20040312  20060314             0.1       0.3
A         20040313  20060314             0.2       0.3
A         20040314  20060314             0.1       0.3

使用道具

板凳
chengsm13 发表于 2009-3-2 08:31:00 |只看作者 |坛友微信交流群

楼主需要首先自己问自己一个问题,在最后的数据集里出现两个日期date何dateann是不是有意义。我觉得完全没有意义。

第一步,改名:

data2;

    set data2;

    rename dateann = date;

run;

第二步,重新排序,

proc sort data=data1;

    by stock date;

run;

proc sort data=data2;

    by stock date;

run;

第三步,合并,

    data all;

        merge data1 data2;

        by stock date;

    run;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

报纸
janegoodall 发表于 2009-3-2 11:00:00 |只看作者 |坛友微信交流群

谢谢啦,不过直接by merge 肯定不可以的

使用道具

地板
janegoodall 发表于 2009-3-2 11:04:00 |只看作者 |坛友微信交流群

to chengsm13

谢谢啦。。。不过我是要date和dateann两个数据的,后面还有操作需要两者之间的关系。。。

使用道具

7
janegoodall 发表于 2009-3-2 11:16:00 |只看作者 |坛友微信交流群
以下是引用yongyitian在2009-3-2 7:43:00的发言:

The following is the SQL inner join.

data data1;
  input stock $ date abnormalreturn;
datalines;
A                  20040311                      0.11
A                  20040312                      0.1
A                   20040313                     0.2
A                   20040314                     0.1
; run;
data data2;
   input stock $ dateann dif;
datalines;
A                     20040311                      0.1
A                     20050317                      0.2
A                     20060314                       0.3
; run;
proc sql;
   select a.stock, date, dateann, abnormalreturn,  dif
   from data1 a, data2 b
   where a.stock=b.stock
   order by a.stock, dateann, date;
quit;

output
 stock         date   dateann  abnormalreturn       dif
-----------------------------------------------------------------
A         20040311  20040311            0.11       0.1
A         20040312  20040311             0.1       0.1
A         20040313  20040311             0.2       0.1
A         20040314  20040311             0.1       0.1
A         20040311  20050317            0.11       0.2
A         20040312  20050317             0.1       0.2
A         20040313  20050317             0.2       0.2
A         20040314  20050317             0.1       0.2
A         20040311  20060314            0.11       0.3
A         20040312  20060314             0.1       0.3
A         20040313  20060314             0.2       0.3
A         20040314  20060314             0.1       0.3

谢谢啦

我试了一下应该可以的。

可能是我昨天打错了,造成误会了。我想要的是当年的股票交易日date和当年的财务报告日dateann的匹配

也就是说我要

stock                   date                             dateann

A                          20040101                    20040311            

A                          20040102                   20040311

A                        20040103                      20040311

................

但是不需要 

A                      20040101                      20050317

A                      20040102                      20050317

..................

你说的方法已经可以使用,就是还得后续操作一下,把那些年份不匹配的去掉。

有没有什么方法能一步到位呀?太谢谢你啦

[em01]

[此贴子已经被作者于2009-3-2 11:17:03编辑过]

使用道具

8
chengsm13 发表于 2009-3-2 12:28:00 |只看作者 |坛友微信交流群

我大概开始明白你要干什么了。我们需要引入一个新变量y,他是年代,完成以后在丢掉。

第一步,引入变量y:

data1;

    set data1;

    y = year(date);

run;

data2;

    set data2;

    y= year(dateann);

run;

第二步,重新排序,

proc sort data=data1;

    by stock y;

run;

proc sort data=data2;

    by stock y;

run;

第三步,合并,

    data all;

        merge data1 data2;

        by stock y;

    run;

第四部,丢掉y,

    data all;

       set all;

       drop y;

    run;

使用道具

9
janegoodall 发表于 2009-3-2 16:16:00 |只看作者 |坛友微信交流群

to chengsm13

你上面说的那个方法我试过了原来。但是有一个问题,这样date如果和dateann不是同一天,那么这时候这一行的dateann就是一个.,而我希望的是不管是不是同一天这个地方都有对应年份年报报出日的dateann:)

使用道具

10
yongyitian 发表于 2009-3-3 00:35:00 |只看作者 |坛友微信交流群

Add a year variable in dataset data1, data2 and condition in where clause. As Shown in the follows.

I used informat and format for date variable, so the date looks slightly different.

data data1;
  informat date yymmdd8.;
  input stock $ date abnormalreturn;
  year1 = year(date);
datalines;
A                  20040311                    0.11
A                  20040312                     0.1
A                  20040313                     0.2
A                  20040314                     0.1
;run;
proc print data=data1;
format date date.;
run;

data data2;
   informat dateann yymmdd8.;
   input stock $ dateann dif;
   year2 = year(dateann);
datalines;
A                     20040311                      0.1
A                     20050317                      0.2
A                     20060314                      0.3
;run;
proc print data=data2;
format dateann date.;
run;

proc sql;
   select a.stock, date format=yymmdd8., dateann format=yymmdd8.,
           abnormalreturn,  dif
   from data1 a, data2 b
   where a.stock=b.stock and a.year1=b.year2
   order by a.stock, dateann, date;
quit;

output
stock         date   dateann  abnormalreturn       dif
A         04-03-11  04-03-11            0.11       0.1
A         04-03-12  04-03-11             0.1       0.1
A         04-03-13  04-03-11             0.2       0.1
A         04-03-14  04-03-11             0.1       0.1

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-28 18:33