楼主: 朗啊朗
3105 10

[编程问题求助] 求助!!!stata单个用户的时间间隔如何计算? [推广有奖]

  • 2关注
  • 0粉丝

本科生

48%

还不是VIP/贵宾

-

威望
0
论坛币
3008 个
通用积分
5.3721
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2057 点
帖子
27
精华
0
在线时间
156 小时
注册时间
2016-2-1
最后登录
2023-7-30

楼主
朗啊朗 发表于 2019-12-22 18:09:56 |AI写论文
100论坛币
我想计算出某个用户,即account_id,前后两条记录的两个日期,即order_time,的间隔天数,但是不知道用什么命令可以限定于某一个用户,一次生成一列数据。这里最麻烦的是每个用户的时间间隔需要单独计算。我现在能想到的笨方法是把每个用户的id拆成一个个独立的Excel表格,然后用日期计算函数去算出时间间隔,因为数据量巨大,这个工作太耗费时间,希望有大神能帮忙解答,万分感谢!

下面是我的问题示例:
我以第一条id "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F"来举例,我想计算这个用户order_time的每两条记录的间隔,比如第一行记录和第二行记录,那这两条记录相隔的天数就是0天。我想另外生成一列来摆放这个算出来的0天。这里最麻烦的是,两个用户过渡的地方,具体的位置举例,比如,上一行记录是"004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:31:43",下一行记录是"00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:06:40"。我现在想到的方法是,先去计算上下两行的时间间隔,之后再把两个用户相接的位置的数据删掉。不知道有没有大神知道怎么计算上下两行的时间间隔?

----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str36 account_id str19 order_time
  4. "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:26:13"
  5. "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:27:12"
  6. "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:27:42"
  7. "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:28:13"
  8. "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:29:12"
  9. "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:31:43"
  10. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:06:40"
  11. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:18:43"
  12. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:26:00"
  13. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:50:18"
  14. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:50:19"
  15. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:50:22"
  16. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-18 09:41:01"
  17. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-19 16:38:26"
  18. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-19 16:38:32"
  19. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-19 16:38:51"
  20. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-21 13:37:53"
  21. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-08 17:45:05"
  22. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-17 19:01:10"
  23. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-26 11:21:35"
  24. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-30 15:49:41"
  25. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-09 18:00:28"
  26. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-09 18:07:00"
  27. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-13 21:35:09"
  28. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-19 15:04:16"
  29. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-20 15:15:21"
  30. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-21 16:11:15"
  31. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-16 20:19:33"
  32. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-17 17:57:27"
  33. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-17 18:16:08"
  34. "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-19 16:58:13"
  35. "00910CA4-F692-4D4A-923F-BF29E2774D37" "2019-08-30 19:32:44"
  36. end
复制代码

------------------ copy up to and including the previous line ------------------





关键词:stata时间序列;stata时间间隔计算;求助 统计

沙发
震震果实 发表于 2019-12-22 18:09:57
  1. gen time=substr( order_time,1,10 )
  2. gen t=date( time,"YMD")
  3. encode account_id,gen(id)
  4. bys id:gen n=_n
  5. xtset id n
  6. bys id:gen tt=t-L.t
复制代码

藤椅
黃河泉 在职认证  发表于 2019-12-23 06:47:26
无法理解你的问题与要的东西,请以你的资料举例!

板凳
朗啊朗 发表于 2019-12-23 09:13:21
黃河泉 发表于 2019-12-23 06:47
无法理解你的问题与要的东西,请以你的资料举例!
好的,多谢回复!

报纸
朗啊朗 发表于 2019-12-23 09:58:28
如果时间数据是按列摆放的,计算两列变量的时间间隔:
gen var1=date("YYYY-MM-DD","YMD")
gen var2=date("YYYY-MM-DD","YMD")
gen day=var2-var1

地板
黃河泉 在职认证  发表于 2019-12-23 10:30:41
朗啊朗 发表于 2019-12-23 09:58
如果时间数据是按列摆放的,计算两列变量的时间间隔:
gen var1=date("YYYY-MM-DD","YMD")
gen var2=date ...
老实说,你的说明并无帮助,你是要这期减去上一期吗?

7
黃河泉 在职认证  发表于 2019-12-23 10:36:49
朗啊朗 发表于 2019-12-23 09:58
如果时间数据是按列摆放的,计算两列变量的时间间隔:
gen var1=date("YYYY-MM-DD","YMD")
gen var2=date ...
你要的是这个吗?
  1. gen dc = clock(order_time,"YMDhms")
  2. format dc %tc
  3. bys account_id (dc): gen wanted = dc-dc[_n-1]
复制代码

8
朗啊朗 发表于 2019-12-23 11:02:46
黃河泉 发表于 2019-12-23 10:36
你要的是这个吗?
我就是想要生成一个新的变量,计算上下两行的时间间隔(单位:天数),比如计算第一行和第二行的时间间隔,第二行和第三行的时间间隔,第三行和第四行的时间间隔,以此类推。

9
震震果实 发表于 2019-12-23 11:21:42
朗啊朗 发表于 2019-12-23 11:02
我就是想要生成一个新的变量,计算上下两行的时间间隔(单位:天数),比如计算第一行和第二行的时间间隔 ...
应该没啥问题

10
朗啊朗 发表于 2019-12-23 11:28:36
震震果实 发表于 2019-12-23 10:39
太感谢你了!我刚刚运行了你的代码,是可以算出想要的结果的!有个小问题,我想把两次相减的结果对应地放在“减数”的那个日期的那一行,这个应该怎么改动您的代码呢?

为了让您更加理解,我用代码表述一下我的问题:gen timegap=time[_n] - time[_n-1]
即,计算上下两行的时间间隔(单位:天数),比如计算第一行和第二行的时间间隔,第二行和第三行的时间间隔,第三行和第四行的时间间隔,以此类推。

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-19 23:57