Stata / Excel时间格式问题

时间:2015-02-15 14:49:11

标签: excel datetime format stata

我有一个变量minutes,我无法清理/标准化。

它以日期时间格式从Excel导入,但我只想要分钟。例如,如果玩家玩30分34秒,则显示为30:34或30:34:00。但是,它是在上午6:34(30:34被解释为军事时间)或12:34 AM存储在Excel中,具体取决于它是30:34还是30:34:00。因此它最终会以6:34或12:34导入Stata,此时我想要的值是显示的(30:34或30:34:00)。有没有办法将Excel中的数字格式化为显示的值?

一旦将其导入Stata,就无法进行标准化,因为您无法区分播放时间为30:34的播放器(当显示时间为30:34:00时)来自播放6:34的播放器(他们都会显示6:34)。

2 个答案:

答案 0 :(得分:1)

发帖时请多付出努力。有能力提供帮助的人可能会忽略这个问题,因为它很难理解,因为你没有提供代码(因此没有付出任何努力),因为问题不可重现,而且更多。

假设MS Excel表格如下

enter image description here

然后以下开始使用

clear
set more off

import excel timetest.xls, cellrange(C2:C4) firstrow

gen hour = hh(time)
gen sec = mm(time)

gen realmin = hour + 24

order realmin, before(sec)
list

导致

. list

     +-------------------------------------------+
     |               time   hour   realmin   sec |
     |-------------------------------------------|
  1. | 01jan1900 06:34:00      6        30    34 |
  2. | 01jan1900 00:00:00      0        24     0 |
     +-------------------------------------------+

请参阅help datetime。如果使用日期和/或时间,这是必须的。

请注意,添加24不适用于任何数据集。

一般解决方案采用

的形式
clear
set more off

import excel timetest.xls, cellrange(C2:C5) firstrow

gen hour = hh(time)
gen sec = mm(time)

gen t = dofc(time)
format t %td

gen dayselap = t - td(01jan1900) + 1

gen realmin = hour + (24 * dayselap)

drop hour t dayselap
order time realmin
list

例如,MS Excel中的此数据:

time
30:34:00
24:00:00
58:04:00
65:00:00

将产生

. list

     +------------------------------------+
     |               time   realmin   sec |
     |------------------------------------|
  1. | 01jan1900 06:34:00        30    34 |
  2. | 01jan1900 00:00:00        24     0 |
  3. | 02jan1900 10:04:00        58     4 |
  4. | 02jan1900 17:00:00        65     0 |
     +------------------------------------+

(闰年可能存在一个问题,鼓励您自己研究。)

替代解决方案可能涉及将值转换为文本(在MS Excel中),然后在Stata中管理文本。

答案 1 :(得分:0)

我对Stata一点都不熟悉。

问题是Excel输入的实际数据输入不正确。 Excel将日期和时间存储为天+一天中的几分之一,然后根据格式显示它。

所以:

  

30:34实际上是0小时30分34秒,存储为2.1226851851851854E-2,这是计算:30/(24*60)+34/(24*60*60)

     

但是30:34:00实际上是30小时34分0秒并存储为1.273611111111111,这是计算30/24+34/(24*60)

取决于它是以0:30:34正确输入,还是以30:34不正确地确定存储的值。

在Excel中,如果您有一些测试来判断数据输入是否正确,您可以预先处理这些值。

例如:

=IF(time_unreasonable,A1/60,A1)

如果输入的值不正确,则会转换为小时:分钟而不是分钟:秒。

其他解决方案也可能是可行的,甚至可能在Stata中。