Сохранение файла R в Stata с сохранением формата даты и времени - PullRequest
0 голосов
/ 28 мая 2020

Привет, мне нужно сохранить файл из RDS в Stata.

У меня есть несколько файлов в формате .RDS, и я хочу сохранить их все в формате stata (.dta). Я использовал write.dta () для сохранения, но когда я открылся в stata, я понял, что мое datetime неверно, и я не могу преобразовать его обратно

, т.е. у меня есть переменная с именем «datetime» в R, которая показывает дата и время в этом формате (2019-09-13 00:12:00)

Я хочу иметь возможность вернуть это datetime, когда сохраняю файл в формате stata.

как следует ли мне сохранять файлы, чтобы можно было сохранить формат даты и времени. спасибо!

1 Ответ

1 голос
/ 28 мая 2020

Из документации для функции write.dta() :

Если не отключено аргументом convert.dates = FALSE, дата и дата-время объекта R (классы POSIXt) являются преобразовано в формат даты Stata, количество дней с 01.01.1960. (Для объектов даты и времени это может привести к потере информации.) Stata можно сказать, что это даты с помощью

format xdate %td;

. Можно передать объекты класса POSIXct в Stata для обработки как одна из его версий даты-времени. Stata использует количество миллисекунд с 1 января 1960 г. либо без учета (формат% t c), либо с учетом (формат% t C) дополнительных секунд. Таким образом, либо объект класса POSICct может быть передан в Stata с помощью convert.dates = FALSE и преобразован в Stata, либо необходимо добавить 315619200 и затем умножить на 1000 перед передачей в write.dta и присвоением формата% t c. Комментарии Stata по первому маршруту находятся в http://www.stata.com/manuals13/ddatetime.pdf, но на момент написания были ошибочными: R использует соглашения POSIX и, следовательно, не считает дополнительные секунды.

Другой подход будет форматировать переменную даты и времени как символ перед записью в Stata. Это можно сделать следующим образом:

aDateTime <- as.POSIXct("2020-05-28 13:00:00")

aDateTime

> aDateTime
[1] "2020-05-28 13:00:00 EDT"
> 

Теперь, когда у нас есть объект даты и времени, давайте преобразуем его в символ с помощью функции strftime().

# convert to string
strftime(aDateTime,"%Y-%m-%d %H:%M:%S")

... и вывод:

> # convert to string
> strftime(aDateTime,"%Y-%m-%d %H:%M:%S")
[1] "2020-05-28 13:00:00"
>
...