Time Stata误读时间变量-如何更改这些变量?

Time Stata误读时间变量-如何更改这些变量?,time,stata,minute,Time,Stata,Minute,我有通过.xlsx文件从在线来源导入的体育数据。每次观察都是NFL(美式足球)比赛中的一个点球。为了以后将此数据集与另一个数据集合并,我需要在两个文件之间匹配某些变量/值。然而,我用一个变量解决了一个问题 在所讨论的主要数据集中(最初提到的惩罚数据集),我的最终目标是创建两个变量,Minute和Second,它们的类型为byte和格式为%8.0g。这将使它们与目标数据集中的各个变量完全对应。我有可用的必要信息,这是NFL比赛给定季度的剩余时间,但它以一种奇怪的方式存储,我在转换东西时遇到困难 数

我有通过.xlsx文件从在线来源导入的体育数据。每次观察都是NFL(美式足球)比赛中的一个点球。为了以后将此数据集与另一个数据集合并,我需要在两个文件之间匹配某些变量/值。然而,我用一个变量解决了一个问题

在所讨论的主要数据集中(最初提到的惩罚数据集),我的最终目标是创建两个变量,
Minute
Second
,它们的类型为
byte
格式为%8.0g
。这将使它们与目标数据集中的各个变量完全对应。我有可用的必要信息,这是NFL比赛给定季度的剩余时间,但它以一种奇怪的方式存储,我在转换东西时遇到困难

数据存储在名为
Time
的变量中。显然,从原始.xlsx文件导入的数据看起来很好。例如,第一个观察读数为“12:21”,表示该季度还剩12分21秒。但是,从.xlsx工作表导入时,Stata假定变量
Time
是一个以hh:mm为单位测量的日期/时间变量,因此将其指定为
double
类型和
%tchh:mm
格式


最后,我并不真正关心如何正确格式化这个
Time
变量,但我需要以某种方式使它与目标文件所需的
Minute
Second
列相匹配。我尝试了几种不同的方法,但到目前为止似乎没有任何效果

如果Stata将分和秒误读为小时和分钟,并且(事实上)以毫秒为单位存储日期时间,那么它将关闭60(分钟/小时)x1000(毫秒/秒)=60000。所以,考虑

. clear 

. set obs 1 
number of observations (_N) was 0, now 1

. gen double wrong = clock("1jan1960 12:21:00", "DMY hms") 

. format wrong %tchh:MM 

. clonevar alsowrong = wrong 

. format alsowrong %15.0f 

. list 

     +------------------+
     | wrong   alsowr~g |
     |------------------|
  1. | 12:21   44460000 |
     +------------------+

. gen right = wrong/60000

. gen byte Minute = floor(right/60) 

. gen byte Second = mod(right, 60) 

. list 

     +--------------------------------------------+
     | wrong   alsowr~g   right   Minute   Second |
     |--------------------------------------------|
  1. | 12:21   44460000     741       12       21 |
     +--------------------------------------------+
我不能轻易评论你的导入,因为无论是导入的文件还是精确的导入代码都没有给出示例

编辑另一种方法:

. gen alsoright = string(wrong, "%tchh:MM")

. gen minute = real(substr(alsoright, 1, strpos(alsoright, ":") - 1))

. gen second = real(substr(alsoright, strpos(alsoright, ":") + 1, .))

. l alsoright minute second

     +----------------------------+
     | alsori~t   minute   second |
     |----------------------------|
  1. |    12:21       12       21 |
     +----------------------------+

太好了!非常感谢。昨晚在我回家的路上,我想到了你的第一个解决方案。如果这里没有回答这个问题,我早就试过了。我使用了您提到的第二个解决方案(在编辑之后),因为它比较短,而且工作得非常好。昨天我尝试过这样做,但我无法让字符串变量(“alsoright”)读取“12:21”,而不是Stata实际读取的基本日期/时间编号。再次感谢你的帮助!