2016-04-23 2 views
1

У меня проблема в Stata с форматом дат. Я считаю, что это очень простой вопрос, но я не понимаю, как это исправить.Преобразование строки ежемесячных дат в Stata

У меня есть CSV-файл (file.csv), который выглядит как

v1   v2 
01/01/2000 1.1 
01/02/2000 1.2 
01/03/2000 1.3 
...  
01/12/2000 1.12 
01/02/2001 1.1 
... 
01/12/2001 1.12 

Форма v1 является дд/мм/гггг.

импортировать файл в Stata используя import delimited ...file.csv

v1 строковая переменная, v2 является поплавок.

Я хочу преобразовать v1 в ежемесячно дата, которую Stata может читать.

Мои попытки:

1)

gen Time = date(v1, "DMY") 
format Time %tm 

, который дает мне

Time 
3177m7 
3180m2 
3182m7 
... 

, что выглядит не так.

2) В альтернативном

gen v1_1=v1 
replace v1_1 = substr(v1_1,4,length(v1_1)) 
gen Time_1 = date(v1_1, "MY") 
format Time_1 %tm 

, который дает точно такой же результат.

И если я типа

tsset Time, format(%tm) 

он говорит мне, что есть пробелы, но нет никаких пробелов в данных.

Не могли бы вы помочь мне понять, что я делаю неправильно?

ответ

4

Stata имеет wonderful documentation о датах и ​​времени, которые вы должны читать от начала до конца, если вы планируете использовать переменные, зависящие от времени. Чтение этой документации не только решит вашу текущую проблему, но и потенциально предотвратит дорогостоящие ошибки в будущем. Раздел, связанный с вашим вопросом, называется «Преобразование SIF-to-SIF». SIF означает «Внутренняя форма Stata».

Чтобы объяснить текущую проблему:

Stata хранит даты как номер; вы интерпретируете их как «даты» при назначении формата. Рассмотрим следующий пример:

set obs 1 
gen dt = date("01/01/2003", "DMY") 
list dt 
// 15706 

Так что дата назначается формат значения 15706. Давайте, чтобы это выглядело, как день:

format dt %td 
list 
// 01jan2003 

Теперь давайте форматировать его через месяц:

format dt %tm 
list 
// 3268m11 

Обратите внимание, что dt - это просто номер, который вы можете отформатировать и использовать как день или месяц.Для того, чтобы получить «номер месяца» от «дня числа», выполните следующие действия:

gen mt = mofd(dt) // mofd = month of day 
format mt %tm 
list 
//  dt  mt 
// 3268m11 2003m1 

Переменная mt теперь равна 516. январь 2003 составляет 516 месяцев с января 1960 года «время эпохи» STATA является 1 январь, 1960 00: 00: 00.000. Переменные даты сохраняются как дни с момента эпохи, а переменные datetime сохраняются как милисекунды с момента времени. Месячная переменная может храниться как месяцы с момента эпохи (именно так форматирование %tm определяет, какой месяц показывать).