我已经获得了通过.xlsx文件从在线资源中导入的体育数据。每次观察都是NFL(美式橄榄球)比赛中的一个点球。为了稍后merge
使用另一个数据集,我需要在两个文件之间匹配某些变量/值。但是,我遇到了一个变量的问题。
在有问题的主要数据集(最初提到的惩罚数据集)中,我的最终目标是创建两个变量Minute
和Second
,其类型为byte
和{{ 1}}。这将使它们与目标数据集中的相应变量完全对应。我有所需的信息,这是NFL比赛给定季度的剩余时间,但是它以奇怪的方式存储,而且我在转换内容方面遇到了麻烦。
数据存储在名为format %8.0g
的变量中。可见,从原始.xlsx文件导入的数据看起来很好。例如,第一次观察读取" 12:21",表示该季度剩余12分21秒。但是,从.xlsx工作表导入时,Stata假定变量Time
是以hh:mm测量的日期/时间变量,因此为其分配Time
类型和格式{{ 1}}。
最后,我并不真正关心正确格式化此double
变量,但我需要以某种方式使匹配成为所需的%tchh:MM
和Time
列目标文件。我尝试了几种不同的方法,但到目前为止似乎没有任何效果。
答案 0 :(得分:1)
如果Stata将分钟和秒钟误读为小时和分钟,并且(也就是说)以毫秒为单位存储日期时间,那么它会以60(分钟/小时)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 |
+----------------------------+