楼主: lutian08
6073 9

[编程问题求助] 为何excel中的时间导入stata会问题 [推广有奖]

  • 0关注
  • 8粉丝

已卖:63份资源

副教授

53%

还不是VIP/贵宾

-

威望
0
论坛币
12013 个
通用积分
0.0816
学术水平
29 点
热心指数
33 点
信用等级
23 点
经验
7912 点
帖子
285
精华
0
在线时间
1422 小时
注册时间
2009-11-14
最后登录
2025-11-27

楼主
lutian08 发表于 2018-4-18 08:17:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
为何excel中的时间导入stata会问题

那些后面是9的是有问题的
二维码

扫码加我 拉你入群

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

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

关键词:Stata EXCEL exce tata xcel

dtstatatoexcel.png (18.58 KB)

后面是9的是有问题的

后面是9的是有问题的

datetime.xlsx
下载链接: https://bbs.pinggu.org/a-2453628.html

10.33 KB

原始数据

沙发
arikjin 在职认证  发表于 2018-4-18 12:38:23
直接读取好像是由问题,但是可以从dt1先提取字符型的日期,然后转换为日期型,并设定日期格式。将这个excel导入stata后试试以下代码
  1. gen dt3s=substr(dt1,3,.)
  2. gen double dt3 = clock(dt3s,"YMDhm")
  3. format dt2 %tcnn/dd/ccYY_HH:MM
  4. format dt3 %tcnn/dd/ccYY_HH:MM
复制代码

可以比较一下dt2和dt3。dt2是从excel直接导入的就有问题,但从dt1提取为dt3s,再转换为日期格式是没有问题的。

藤椅
arikjin 在职认证  发表于 2018-4-18 12:54:24
我刚刚又做了一些测试,发现实际上还是闰秒引起的问题。请再试试下列代码,比较dt4和dt2
  1. gen double dt4=Cofc(dt2)
  2. format dt4 %tcnn/dd/ccYY_HH:MM
复制代码

很明显,从excel直接导入的dt2时间,是按照每天固定86400秒算的,用Cofc函数,从datetime/c 格式的时间转换成datetime/C 格式的时间(经过闰秒调整)后,得到的就是和excel原始的时间格式一模一样的了。

板凳
lutian08 发表于 2018-4-18 13:58:27
arikjin 发表于 2018-4-18 12:54
我刚刚又做了一些测试,发现实际上还是闰秒引起的问题。请再试试下列代码,比较dt4和dt2

很明显,从exce ...
估计是精度的问题,不是你说的原因

报纸
lutian08 发表于 2018-4-18 14:25:43
arikjin 发表于 2018-4-18 12:54
我刚刚又做了一些测试,发现实际上还是闰秒引起的问题。请再试试下列代码,比较dt4和dt2

很明显,从exce ...
有一点还是没想明白,都是同一天发生的事情,如是润秒的问题,为何不是所有的时间都少1秒,而是个别的时间少1秒呢?我估计还是精度的问题,Excel里的时间储存时,以天为单位,小时分钟秒折算为小数,这样有的不能被整除,就小数点后好多位了

地板
arikjin 在职认证  发表于 2018-4-18 16:25:10
lutian08 发表于 2018-4-18 14:25
有一点还是没想明白,都是同一天发生的事情,如是润秒的问题,为何不是所有的时间都少1秒,而是个别的时间 ...
  1. gen double dt3=dt2
  2. gen double dt4=Cofc(dt2)
  3. gen double dt5=dt3
  4. gen double dt6=dt4
  5. format dt5 dt6 %tcnn/dd/ccYY_HH:MM
  6. gen double diff=dt4-dt3
复制代码
可以看见,凡是diff(调整闰秒和不调整闰秒的毫秒差)是14999的显示的两个时间就正好相差了1分钟,而diff是15000的显示的两个时间就是一样的。要再具体了解原因,需要仔细看看stata是怎么处理闰秒的,help文件里面可能有相关的说明, 但我没时间细看。我觉得也没必要弄清楚,只要你清楚这种情况怎么处理就行了。凡是出现这种导入后时间有差异的,多半是原始时间精度不够(原始的excel里面时间只精确到了分而不是毫秒,而stata的时间是精确到毫秒的),最后因为闰秒的原因导致的显示差异。

7
arikjin 在职认证  发表于 2018-4-18 16:33:57
lutian08 发表于 2018-4-18 14:25
有一点还是没想明白,都是同一天发生的事情,如是润秒的问题,为何不是所有的时间都少1秒,而是个别的时间 ...
excel里面的时间是可以精确到秒的(不知道能不能到毫秒),这要看数据自身有没有那么精确了。

8
lutian08 发表于 2018-4-18 16:54:08
arikjin 发表于 2018-4-18 16:33
excel里面的时间是可以精确到秒的(不知道能不能到毫秒),这要看数据自身有没有那么精确了。
比如22点,excel里22/24,除不完,0.91666666.........这样stata在转化时如小数后位数不够,就产生很小的差异了,导致最终的显示结果不完全一样

9
arikjin 在职认证  发表于 2018-4-18 18:14:02
lutian08 发表于 2018-4-18 16:54
比如22点,excel里22/24,除不完,0.91666666.........这样stata在转化时如小数后位数不够,就产生很小的差 ...
我个人觉得不是因为22/24这种原因,而是excel里面只显示22:00,没有秒数也没有毫秒,所以导入stata的时候会直接被处理成22::00:00.000对应的与1960/1/1 00:00:00.000直接的毫秒差(未调整闰秒的)。你可以看我上面那几个代码后生成的dt3和dt4的差别。把dt2的时间格式还原成毫秒差,会发现最后5位数全是0,意思就是00.000秒,即0毫秒。
我觉得你纠结这个原因毫无意义。。。

10
ggfjack 学生认证  发表于 2020-12-2 15:20:19
dt2是怎么从dt1转换过来的?

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

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