Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata/Excel时间格式问题_Excel_Datetime_Format_Stata - Fatal编程技术网

Stata/Excel时间格式问题

Stata/Excel时间格式问题,excel,datetime,format,stata,Excel,Datetime,Format,Stata,我有一个变量minutes,我在清理/标准化时遇到问题 它是以日期时间格式从Excel导入的,但我只需要分钟。例如,如果玩家玩30分34秒,则显示为30:34或30:34:00。但是,它在Excel中存储为6:34 AM(30:34被解释为军事时间)或12:34 AM,这取决于它是30:34还是30:34:00。因此,当我想要的值是显示的值(30:34或30:34:00)时,它最终以6:34或12:34的形式导入Stata。是否有一种方法可以将Excel中的数字格式化为显示的值 一旦它被导入St

我有一个变量
minutes
,我在清理/标准化时遇到问题

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


一旦它被导入Stata,就不可能实现标准化,因为你无法区分玩30:34(显示30:34:00)的玩家和玩6:34(都显示6:34)的玩家

我对斯塔塔一点也不熟悉

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

因此:

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

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

根据是否正确输入0:30:34或不正确输入30:34来确定存储的值

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

例如:

=IF(time_unreasonable,A1/60,A1)
如果错误地将值输入为小时:分钟而不是分钟:秒,则将转换这些值


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

请在发布问题时更加努力。有能力帮助的人可能会忽略这个问题,因为它很难理解,因为你没有提供代码(因此没有表现出任何努力),因为这个问题是不可复制的,等等

假设一个MS Excel工作表如下所示

那么以下内容应该可以帮助您开始学习:

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 |
     +-------------------------------------------+
请参见帮助日期时间。如果使用日期和/或时间,这是必须的

请注意,添加
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中管理文本

我觉得这很难理解,也很难复制。请参阅有关如何发布好问题的帮助页面。设置数字格式以使其成为显示值的唯一方法是将该值设置为文本格式(或在其前面加一个引号)。在输入值之前,必须将格式设置为文本。