楼主: boi_Z
1698 12

[数据管理求助] stata如何将季度末数据赋值给季度中的每一天 [推广有奖]

  • 3关注
  • 0粉丝

本科生

39%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
2.0889
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1357 点
帖子
52
精华
0
在线时间
108 小时
注册时间
2020-11-12
最后登录
2023-7-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
stata新手求问,我现在有每年每个季度末,每支股票的机构持股量(主表数据),想要将这个季度末数据匹配到每支股票在当年这个季度中的每一天当中(匹配表数据),请问该如何实现呢?
主表数据
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long stkcd str10 trddt double instihold
  4. 2 "2011-03-31" 3505060771
  5. 2 "2011-06-30" 4200094776
  6. 2 "2011-09-30" 3765885429
  7. 2 "2011-12-31" 4632876840
  8. 2 "2012-03-31" 4460984875
  9. 2 "2012-06-30" 5157505310
  10. 2 "2012-09-30" 4794275700
  11. 2 "2012-12-31" 5215752671
  12. 2 "2013-03-31" 4837327210
  13. 2 "2013-06-30" 5260787968
  14. end
复制代码



匹配表数据
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long stkcd str10 trddt double(dnshrtrd circulatedmarketvalue)
  4. 2 "2011-01-04" 188816123 96109192753
  5. 2 "2011-01-05" 125616280 96223413128
  6. 2 "2011-01-06"  79128446 96511722151
  7. 2 "2011-01-07" 144721563 97331416795
  8. 2 "2011-01-10" 129046684 95682212658
  9. 2 "2011-01-11" 134731238 98591419933
  10. 2 "2011-01-12" 135521972 98851547238
  11. 2 "2011-01-13"  58795894 97678000509
  12. 2 "2011-01-14"  88532157 98698280098
  13. 2 "2011-01-17" 119826663 92490273052
  14. end
复制代码



希望能得到帮助,非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata generated generate install

沙发
zdlspace 学生认证  发表于 2021-2-1 12:27:55 |只看作者 |坛友微信交流群
help merge 1:m

使用道具

藤椅
boi_Z 发表于 2021-2-1 12:37:39 来自手机 |只看作者 |坛友微信交流群
zdlspace 发表于 2021-2-1 12:27
help merge 1:m
感谢回复,merge 命令我知道的,我的问题描述的不清楚。现在是这个日期是字符型的,每个股票对应的是10年,每年四个季度的日数据,但是主表数据中的季度数据中的时间是季度末日期,所以merge 的时候我不知道这个匹配项应该如何设置。之前看到的有date q=q(date  “YQ”)这样的命令,但是得不到结果,所以想问的是该怎么改变两个表中的日期格式,请问您有了解吗?

使用道具

板凳
boi_Z 发表于 2021-2-1 13:21:35 |只看作者 |坛友微信交流群
zdlspace 发表于 2021-2-1 12:27
help merge 1:m
感谢您的回复,抱歉我的问题描述的不清楚,我知道merge如何使用,现在是不知道在merge之前怎样把两个表的日期转换成一个格式,比如都转换成某年某季度的格式(yyyyq1、yyyyq2...),现在我的日期是字符型的yyyy-mm-dd,用过gen q =quarterly( trddt,"YQ")但是没有结果,不知道应该怎么把日期格式转换一下才能实现呢,非常感谢!

使用道具

你这个首先要生成日期变量
gen date = date(trddt,"YMD")
format date %td
gen month = month(date)


然后在你的第二份文件里面把月份转换为季度


replace month = 3 if inlist(month,1,2,3)
replace month = 6 if inlist(month,4,5,6)
replace month = 9 if inlist(month,7,8,9)
replace month = 12 if inlist(month,10,11,12)

然后可以用stkcd month匹配了

使用道具

地板
zdlspace 学生认证  发表于 2021-2-1 14:14:35 |只看作者 |坛友微信交流群
use 1,clear
numdate d date=trddt,pattern("YMD")
convdate q q=date
save 1,replace

use 2,clear
numdate d date=trddt,pattern("YMD")
convdate q q=date

merge m:1 stkcd q using 1
list,sep(4) noobs
+----------------------------------------------------------------------------------------------+
  | stkcd        trddt    dnshrtrd   circula~e        date        q   instihold           _merge |
  |----------------------------------------------------------------------------------------------|
  |     2   2011-01-04   1.888e+08   9.611e+10   04jan2011   2011q1   3.505e+09      matched (3) |
  |     2   2011-01-05   1.256e+08   9.622e+10   05jan2011   2011q1   3.505e+09      matched (3) |
  |     2   2011-01-07   1.447e+08   9.733e+10   07jan2011   2011q1   3.505e+09      matched (3) |
  |     2   2011-01-10   1.290e+08   9.568e+10   10jan2011   2011q1   3.505e+09      matched (3) |
  |----------------------------------------------------------------------------------------------|
  |     2   2011-01-11   1.347e+08   9.859e+10   11jan2011   2011q1   3.505e+09      matched (3) |
  |     2   2011-01-12   1.355e+08   9.885e+10   12jan2011   2011q1   3.505e+09      matched (3) |
  |     2   2011-01-17   1.198e+08   9.249e+10   17jan2011   2011q1   3.505e+09      matched (3) |
  |     2   2011-06-30           .           .   30jun2011   2011q2   4.200e+09   using only (2) |
  |----------------------------------------------------------------------------------------------|
  |     2   2011-09-30           .           .   30sep2011   2011q3   3.766e+09   using only (2) |
  |     2   2011-12-31           .           .   31dec2011   2011q4   4.633e+09   using only (2) |
  |     2   2012-03-31           .           .   31mar2012   2012q1   4.461e+09   using only (2) |
  |     2   2012-06-30           .           .   30jun2012   2012q2   5.158e+09   using only (2) |
  |----------------------------------------------------------------------------------------------|
  |     2   2012-09-30           .           .   30sep2012   2012q3   4.794e+09   using only (2) |
  |     2   2012-12-31           .           .   31dec2012   2012q4   5.216e+09   using only (2) |
  |     2   2013-03-31           .           .   31mar2013   2013q1   4.837e+09   using only (2) |
  |     2   2013-06-30           .           .   30jun2013   2013q2   5.261e+09   using only (2) |
  +----------------------------------------------------------------------------------------------+

使用道具

7
zdlspace 学生认证  发表于 2021-2-1 14:15:59 |只看作者 |坛友微信交流群
  1. use 1,clear
  2. numdate d date=trddt,pattern("YMD")
  3. convdate q q=date
  4. save 1,replace

  5. use 2,clear
  6. numdate d date=trddt,pattern("YMD")
  7. convdate q q=date

  8. merge m:1 stkcd q using 1
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

使用道具

8
zdlspace 学生认证  发表于 2021-2-1 14:17:02 |只看作者 |坛友微信交流群
  1. numdate d date=trddt,pattern("YMD")
  2. convdate q q=date
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 精彩帖子

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

使用道具

9
boi_Z 发表于 2021-2-1 15:21:30 来自手机 |只看作者 |坛友微信交流群
图图是秋阳 发表于 2021-2-1 14:04
你这个首先要生成日期变量
gen date = date(trddt,"YMD")
format date %td
用了您的代码操作成功了,非常感谢!

使用道具

10
boi_Z 发表于 2021-2-1 15:23:16 来自手机 |只看作者 |坛友微信交流群
zdlspace 发表于 2021-2-1 14:14
use 1,clear
numdate d date=trddt,pattern("YMD")
convdate q q=date
收到收到,用您的方法也跑出来了,非常感谢!!!

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

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

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