2015-11-05 3 views
-3

Удалось ответить на вопрос, хотя не используя «help datetime» (уже сделал это) или прочитав «Говорящие Stata N.Cox: по номерам и строкам». Решение:Преобразование данных даты и времени

gen dob_ymd_nn = date(dob_ymd,"DMYhm") 
format dob_ymd_nn %td 

Спасибо

Моя Stata переменная dob_dmy показывает дату рождения участника. База данных к сожалению добавила время (все прочитано 00:00). В настоящее время это строковая переменная (str16). Когда я сортирую, он сортируется не по дате, а в первый день. См. Ниже

63. | 01/01/1975 00:00 | 
64. | 01/01/1985 00:00 | 
65. | 01/02/2010 00:00 | 

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

+4

Я бы предложил прочитать хотя бы «help datetime» и отправить сообщение, если у вас возникли проблемы с кодом. –

+0

Оригинальное название «Тщательно посмотрел этот сайт, сайт Stata, университетские сайты. Лоты, найденные, но не имеющие отношения к моему запросу или не работали», были бы бесполезны для кого-либо еще, указав ваш точный вопрос. Выберите информационные заголовки. –

+0

Решение, о котором вы упомянули ** **, задокументировано в упомянутой вами помощи. В статье 2002 года, которую вы цитируете, не предлагается систематически обсуждать даты и в любом случае не может обсуждать обработку дат-времени, которые были внесены в Stata в 2007 году. –

ответ

0

Если вы сохраняете даты как строки в формате MM/DD/YYYY, вы не сможете их отсортировать, кроме как через месяц, затем день, затем год (что не очень полезно). Вам нужно преобразовать их в даты, и THEN сортировать их.

Из следующей ссылке:

gen date_obs = clock(datetime_obs, "MD20Yhm") //Obvously you have 4 digit years, so would change this to "MDYhm" 
format date_obs %tc 

http://www.stata.com/statalist/archive/2013-08/msg01434.html

+0

К сожалению, важно указывать 'double' для хранения дат-времени точно. См. «Даты справки». –

1

@Stan указали основную идею, что вы должны преобразовать из строки в числовой переменной даты. @ Роберто Феррер подчеркнул, что это все задокументировано в самой Стате. Интернет-поиск не требуется.

Использование ваших данных в виде песочницы (вы можете легко создавать такие вопросы в будущих вопросах, используя dataex (SSC)) и принимая подсказку в имени переменной, что даты запускают день, месяц, год, тогда мы можем просто игнорировать бесполезное время суток с substr() и передать полезный материал daily(). Добавьте дату format для удобства чтения, а затем sort Работает по желанию.

. clear 

. input str16 sdate 

       sdate 
    1. "01/02/2010 00:00" 
    2. "01/01/1985 00:00" 
    3. "01/01/1975 00:00" 
    4. end 

. gen ddate = daily(substr(sdate, 1, 10), "DMY") 

. format ddate %td 

. sort ddate 

. list 

    +------------------------------+ 
    |   sdate  ddate | 
    |------------------------------| 
    1. | 01/01/1975 00:00 01jan1975 | 
    2. | 01/01/1985 00:00 01jan1985 | 
    3. | 01/02/2010 00:00 01feb2010 | 
    +------------------------------+ 
Смежные вопросы