我有一个变量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)。
答案 0 :(得分:1)
发帖时请多付出努力。有能力提供帮助的人可能会忽略这个问题,因为它很难理解,因为你没有提供代码(因此没有付出任何努力),因为问题不可重现,而且更多。
假设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 |
+-------------------------------------------+
请参阅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中。