楼主: 2019绛涞
3110 7

[数据管理求助] 如何在限制条件下筛选出距离某个时间点最近的数据呢? [推广有奖]

  • 14关注
  • 1粉丝

已卖:17份资源

硕士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
520 个
通用积分
9.0251
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
5756 点
帖子
38
精华
0
在线时间
309 小时
注册时间
2020-1-6
最后登录
2023-12-17

楼主
2019绛涞 发表于 2020-1-6 18:14:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
样本数据如下:
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long stkcd float year long reportdate float(rptyear rptday) long insid float feps
  4. 2 2011 20110210 2011 210   1093  .76
  5. 2 2011 20110106 2011 106  10202 .778
  6. 2 2011 20110308 2011 308  10416 .925
  7. 2 2011 20110407 2011 407  10416 .925
  8. 2 2011 20110323 2011 323  10416 .925
  9. 2 2011 20110420 2011 420  10416 .925
  10. 2 2011 20110419 2011 419  10512  .89
  11. 2 2011 20110308 2011 308  10823  .96
  12. 2 2011 20110420 2011 420  10823   .9
  13. 2 2011 20110307 2011 307 101434 .895
  14. end
复制代码

目前,我想进行的数据筛选是对于同一个股票代码(stkcd)、同一个年份(year)、同一个证券机构(insid),筛选出距离4月30日最近的预测每股收益(feps),如上面数据所示,10823这一机构(insid)就有2个feps,但是日期(rptday)就有308(03月08日)和420(4月20日)两个报告日期,我想留下420(04月20日)这个报告日期的数据,不知道stata命令是怎样的?
第一次用dataex不知道这样发帖符不符合规则,如有错误,万分抱歉。

二维码

扫码加我 拉你入群

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

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

关键词:限制条件 筛选出 generated generate install

回帖推荐

沙发
震震果实 发表于 2020-1-6 18:40:21 来自手机
码住,一会提供代码。

藤椅
震震果实 发表于 2020-1-6 21:05:56
  1. tostring reportdate,replace
  2. gen t_1=date(reportdate,"YMD")
  3. gen t_2="0430"
  4. gen t_3=year
  5. tostring t_3,replace
  6. gen t_4=t_3+t_2
  7. gen t_5=date(t_4,"YMD")
  8. drop t_2 t_3 t_4
  9. sort stkcd year insid
  10. gen t_6=t_5-t_1
  11. bys stkcd year insid:egen t_7=min(t_6)
  12. gen t_8=t_7-t_6
  13. keep if t_8==0
  14. drop t_*
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

板凳
2019绛涞 发表于 2020-1-6 21:45:21
震震果实 发表于 2020-1-6 21:05
刚刚试过了,就是我想要的结果,非常感谢大佬的帮助

报纸
黃河泉 在职认证  发表于 2020-1-7 07:24:40
也可试试 (感谢 Nick Cox):
  1. gen betterdate = daily(strofreal(reportdate, "%8.0f"), "YMD")
  2. *format betterdate %td
  3. gen diff = abs(betterdate - mdy(4, 30, year))
  4. bysort stkcd year insid (diff): gen wanted = _n == 1
  5. keep if wanted == 1
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

地板
2019绛涞 发表于 2020-1-7 10:58:44
黃河泉 发表于 2020-1-7 07:24
也可试试 (感谢 Nick Cox):
好的,谢谢黄老师的分享

7
欧尼啊啊 发表于 2020-5-16 23:27:28 来自手机
黃河泉 发表于 2020-1-7 07:24
也可试试 (感谢 Nick Cox):
你好,我想请问下要在stata当中,距离最近日期的个体都筛选出来应当执行怎么样的命令呢 谢谢

8
黃河泉 在职认证  发表于 2020-5-17 08:36:25
欧尼啊啊 发表于 2020-5-16 23:27
你好,我想请问下要在stata当中,距离最近日期的个体都筛选出来应当执行怎么样的命令呢 谢谢
你若要问程序,永远附上相关资料 (请不要用截图);若附上资料,永远用 dataex 印出资料。
•        先 ssc install dataex (并见说明),将原始 Stata 资料中具有”代表性”的一部分资料列出,以供有意回答者实验之用,并能提供具体操作指令。
•        请参考说明 https://bbs.pinggu.org/thread-5048204-1-1.html

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-16 09:40