Изменить секунды на строку - PullRequest
0 голосов
/ 21 октября 2018

У меня есть эти секунды, представляющие время завершения каждого круга:

* 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 голосов
/ 21 октября 2018

Как уже упоминалось, на этой территории есть функция, созданная сообществом для 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")

0 голосов
/ 21 октября 2018

Вы, кажется, путаете 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
...