0

我有通过 .xlsx 文件从在线资源导入的体育数据。每个观察结果都是 NFL(美式橄榄球)比赛中的一个点球。为了稍后merge使用另一个数据集,我需要在两个文件之间匹配某些变量/值。但是,我遇到了一个变量的问题。

在有问题的主数据集(最初提到的惩罚数据集)中,我的最终目标是创建两个变量MinuteSecond,它们的类型为byteformat %8.0g。这将使它们与目标数据集中的各个变量完美对应。我有可用的所需信息,即 NFL 比赛给定四分之一的剩余时间,但它以一种奇怪的方式存储,我无法转换。

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

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

4

1 回答 1

1

如果 Stata 将分钟和秒误读为小时和分钟,并且(确实如此)以毫秒为单位存储日期时间,那么它会以 60(分钟/小时)x 1000(毫秒/秒)= 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 |
     +----------------------------+
于 2018-03-13T00:22:25.060 回答