将秒数更改为字符串

时间:2018-10-21 16:33:51

标签: stata

这些秒数代表每圈的完成时间:

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(lap lapruntime)
 1 1386
 2  816
 3 1835
 4 2048
 5  751
 6 2456
 7 1947
 8 1640
 9 2090
10 1372
end

是否可以将其更改为hours:minutes:seconds字符串?

我想我可以用以下命令来做到这一点:

format %tcHH:MM:SS lapruntime 

但是,这给了我一些奇怪的结果。

对于每个单圈跑时间之间的差异,我也想这样做。

2 个答案:

答案 0 :(得分:2)

您似乎将format与变量的类型混淆了,后者设置了变量的输出格式。

如果使用egen命令:

egen slapruntime = elap(lapruntime)
replace slapruntime = substr(slapruntime, 3, .)

generate lapruntime_difference = abs(lapruntime - lapruntime[_n+1])
egen slapruntime_difference  = elap(lapruntime_difference)
replace slapruntime_difference = substr(slapruntime_difference, 3, .)

您可以得到想要的东西:

list, abbreviate(25)

     +---------------------------------------------------------------------------------+
     | lap   lapruntime   slapruntime   lapruntime_difference   slapruntime_difference |
     |---------------------------------------------------------------------------------|
  1. |   1         1386      00:23:06                     570                 00:09:30 |
  2. |   2          816      00:13:36                    1019                 00:16:59 |
  3. |   3         1835      00:30:35                     213                 00:03:33 |
  4. |   4         2048      00:34:08                    1297                 00:21:37 |
  5. |   5          751      00:12:31                    1705                 00:28:25 |
     |---------------------------------------------------------------------------------|
  6. |   6         2456      00:40:56                     509                 00:08:29 |
  7. |   7         1947      00:32:27                     307                 00:05:07 |
  8. |   8         1640      00:27:20                     450                 00:07:30 |
  9. |   9         2090      00:34:50                     718                 00:11:58 |
 10. |  10         1372      00:22:52                       .                    .:.:. |
     +---------------------------------------------------------------------------------+

请注意,首先您需要安装社区贡献的 egenmore软件包,其中包含elap()函数。可以按照以下步骤进行操作:

ssc install egenmore

答案 1 :(得分:2)

如前所述,egen在此地区有一个由社区提供的功能,但是最好使用官方产品并编写您自己的代码。您的示例时间都不超过60分钟,因此以一种方式获取分钟,以另一种方式获取秒会导致串联。一个小但需要的技巧是使用%02.0f以确保通常显示的秒数少于10秒。

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(lap lapruntime)
 1 1386
 2  816
 3 1835
 4 2048
 5  751
end

egen wanted = elap(lapruntime) 

list 

     +-----------------------------+
     | lap   laprun~e       wanted |
     |-----------------------------|
  1. |   1       1386   0:00:23:06 |
  2. |   2        816   0:00:13:36 |
  3. |   3       1835   0:00:30:35 |
  4. |   4       2048   0:00:34:08 |
  5. |   5        751   0:00:12:31 |
     +-----------------------------+

gen minutes = floor(lapruntime/60)
gen seconds = mod(lapruntime, 60)
egen WANTED = concat(minutes seconds), p(:) format(%02.0f)

list 

     +----------------------------------------------------------+
     | lap   laprun~e       wanted   minutes   seconds   WANTED |
     |----------------------------------------------------------|
  1. |   1       1386   0:00:23:06        23         6    23:06 |
  2. |   2        816   0:00:13:36        13        36    13:36 |
  3. |   3       1835   0:00:30:35        30        35    30:35 |
  4. |   4       2048   0:00:34:08        34         8    34:08 |
  5. |   5        751   0:00:12:31        12        31    12:31 |
     +----------------------------------------------------------+

通过代码行的倒数付费的人可以想象一种在一行代码中做到的方式

strofreal(floor(lapruntime/60)) + ":" + strofreal(mod(lapruntime, 60), "%02.0f")