Stata 误读时间变量 - 如何更改这些?
Stata Misreading Time Variables - How to Change These?
我有通过 .xlsx 文件从在线资源导入的运动数据。在 NFL(美式橄榄球)比赛中,每次观察都是点球。为了稍后 merge
这与另一个数据集,我需要有某些 variables/values 在两个文件之间匹配。但是,我遇到了一个变量问题。
在所讨论的主要数据集(最初提到的惩罚数据集)中,我的最终目标是创建两个变量,Minute
和 Second
,类型为 byte
和format %8.0g
。这将使它们与目标数据集中的各个变量完美对应。我有可用的所需信息,即 NFL 比赛给定季度的剩余时间,但它以一种奇怪的方式存储,我在转换时遇到问题。
数据存储在名为 Time
的变量中。可见,从原始 .xlsx 文件导入的数据看起来很好。例如,第一个观察结果为“12:21”,表示本节还剩 12 分 21 秒。但是,当从 .xlsx sheet 导入时,Stata 假定变量 Time
是 date/time 在 hh:mm 中测量的变量,因此将其分配为 [=17] 类型=] 和 %tchh:MM
的格式。
最后,我真的不在乎正确格式化这个 Time
变量,但我需要以某种方式使它匹配所需的 Minute
和 Second
列目标文件。我尝试了几种不同的方法,但到目前为止似乎没有任何效果。
如果 Stata 将分钟和秒误读为小时和分钟,并且(正如它所做的那样)以毫秒为单位存储 date-times,那么它会偏离 60 (minutes/hour) x 1000 (ms/s) = 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 |
+----------------------------+
我有通过 .xlsx 文件从在线资源导入的运动数据。在 NFL(美式橄榄球)比赛中,每次观察都是点球。为了稍后 merge
这与另一个数据集,我需要有某些 variables/values 在两个文件之间匹配。但是,我遇到了一个变量问题。
在所讨论的主要数据集(最初提到的惩罚数据集)中,我的最终目标是创建两个变量,Minute
和 Second
,类型为 byte
和format %8.0g
。这将使它们与目标数据集中的各个变量完美对应。我有可用的所需信息,即 NFL 比赛给定季度的剩余时间,但它以一种奇怪的方式存储,我在转换时遇到问题。
数据存储在名为 Time
的变量中。可见,从原始 .xlsx 文件导入的数据看起来很好。例如,第一个观察结果为“12:21”,表示本节还剩 12 分 21 秒。但是,当从 .xlsx sheet 导入时,Stata 假定变量 Time
是 date/time 在 hh:mm 中测量的变量,因此将其分配为 [=17] 类型=] 和 %tchh:MM
的格式。
最后,我真的不在乎正确格式化这个 Time
变量,但我需要以某种方式使它匹配所需的 Minute
和 Second
列目标文件。我尝试了几种不同的方法,但到目前为止似乎没有任何效果。
如果 Stata 将分钟和秒误读为小时和分钟,并且(正如它所做的那样)以毫秒为单位存储 date-times,那么它会偏离 60 (minutes/hour) x 1000 (ms/s) = 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 |
+----------------------------+