Stata时间变量误读问题:如何创建指定类型格式的Minute与Second变量?
解决Stata中NFL判罚数据的时间变量处理问题
首先,咱们得先搞清楚你的原时间变量现在是什么状态——是被误读成了数值,还是保留成了类似MM:SS的字符串?先运行这两个命令确认一下:
describe your_time_variable // 把your_time_variable换成你实际的时间变量名 list your_time_variable in 1/10
根据不同的变量类型,我们分两种情况处理:
情况1:原时间变量是字符串格式(比如07:23这种)
如果你的时间是以分钟:秒的字符串形式存在,直接用拆分+转换的方式生成byte类型的Minute和Second:
- 拆分字符串变量:
split your_time_variable, parse(:) // 这会生成your_time_variable1(分钟部分)和your_time_variable2(秒部分) - 把拆分后的字符串转成byte类型的数值变量:
gen byte Minute = real(your_time_variable1) gen byte Second = real(your_time_variable2) - 设置你需要的显示格式(%8.0f对应整数的宽格式显示):
format Minute %8.0f format Second %8.0f - 清理中间生成的临时变量(可选):
drop your_time_variable1 your_time_variable2
情况2:原时间变量被误读为数值/日期时间格式
如果Stata把时间当成了纯数值(比如723代表7分23秒)或者错误的日期时间戳,处理方式如下:
- 如果是纯数值(如
1234=12分34秒):gen byte Minute = floor(your_time_variable / 100) // 取整除得到分钟 gen byte Second = mod(your_time_variable, 100) // 取余数得到秒 format Minute %8.0f format Second %8.0f - 如果是被识别为日期时间格式(比如%tc类型):
直接用Stata内置的时间提取函数:gen byte Minute = minute(your_time_variable) gen byte Second = second(your_time_variable) format Minute %8.0f format Second %8.0f
最后验证一下
生成完变量后,记得抽查几行确认结果正确:
list your_time_variable Minute Second in 1/20
如果遇到秒数超过60的异常值(虽然NFL数据里应该很少见),可以用replace Second = mod(Second,60)修正,或者进一步排查数据问题。
内容的提问来源于stack exchange,提问作者Matt McMahon
相关产品推荐
相关产品推荐

