2016-07-15 14 views
0

Чувствует себя очевидным вопросом, но помощь Stata не дала ответов. Большинство пользователей Stata заинтересованы в преобразовании переменной, отличной от даты, в переменную даты, но мне нужно обратное.Преобразование переменной даты в числовое

У меня есть переменная даты date, тип long, формат %tdCCYYNN. Я пытаюсь добавить его к набору данных, в котором одна и та же переменная date имеет тип long и формат %12.0g. Чтобы точно сделать это, мне нужно преобразовать date в первый набор данных от %tdCCYYNN до %12.0g. Когда я делаю format %12.0g date, date значения меняются на неправильные.

Предположим, что в первом наборе данных у меня есть date=201204. Я все еще хочу, чтобы он читал 201204, как переменную %12.0g. Есть ли способ сделать это?

+4

У вас есть проблема в обратном направлении. Если у вас есть номера во втором наборе данных, которые выглядят как 201607, но отформатированы% 12.0g, то они не являются значениями даты Stata и не могут использоваться как таковые. Вам необходимо преобразовать эти значения в значения даты Stata, такие как те, которые вы добавляете в набор данных. –

+4

Если вы еще этого не сделали, вам будет полезно проработать руководство «help datetime», которое, без сомнения, является самой посещаемой документацией в моей системе, причем второй по посещаемости является главой 24 (Работа с датами и временем) * Руководства пользователя * Stata * PDF, доступного из документа PDF Documentation в меню справки Stata. Перед тем, как работать с датами и временем, любой пользователь Stata должен полностью прочитать подробную главу 24. После этого справочной документации, как правило, будет достаточно, чтобы указать путь. –

+4

Изменение формата отображения ** не ** полностью изменить значение. Обсуждение на http://www.stata-journal.com/sjpdf.html?articlenum=dm0067 Более фундаментальной проблемой является то, что ценность, подобная 201204, не может быть ежедневной. См. Http://www.statalist.org/forums/help#stata, в котором даются советы по отображению примеров данных, чтобы сделать вашу проблему ясной. –

ответ

2

I +1 все комментарии, высказанные Ником и Уильямом, и предложите вам прочитать help datetime. Я использую Stata в течение нескольких лет и все еще часто посещаю этот файл справки. Функция даты/времени Stata является фантастической, и вам будет полезно изучить ее раньше, чем позже.

Я бы преобразовал другие данные в формат даты Stata. Действительно. Но если вам нужно преобразовать дату %td в дату «integer YYYYNN», а затем передать временный файл. Если вы напишете %td дату в обычный текст, он сохранит отображаемый формат, и вы сможете прочитать его как целое число YYYYNN.

// data that matches your decsription 
clear 
set obs 1 
generate date = date("20120401", "YMD") 
format date %tdCCYYNN 
list 

// write to tempfile as plain text 
tempfile plainText 
outsheet using "`plainText'" 

// read back with dates as integers 
preserve 
tempfile StataData 
insheet using "`plainText'", clear 
rename date dateInteger 
save "`StataData'" 
restore 

// merge to original data 
merge 1:1 _n using "`StataData'" 
list 
describe 

Это дает следующее.

. list 

    +---------------------------------+ 
    | date dateIn~r  _merge | 
    |---------------------------------| 
    1. | 201204  201204 matched (3) | 
    +---------------------------------+ 

. describe 

Contains data 
    obs:    1       
vars:    3       
size:    7       
----------------------------------------------------------------------------------------------------- 
       storage display value 
variable name type format  label  variable label 
----------------------------------------------------------------------------------------------------- 
date   int  %tdCCYYNN    
dateInteger  long %12.0g     
_merge   byte %23.0g  _merge  
----------------------------------------------------------------------------------------------------- 
Sorted by: 
    Note: Dataset has changed since last saved. 

Но я предлагаю вам воспользоваться функциональностью даты и времени Stata.

+1

Это полезно, но я надеюсь, что вы не одобряете использование '% tdCCYYNN' в качестве формата для ежедневной даты. Без какой-либо конкретной причины просто кажется неправильным использовать формат даты, который подавляет информацию. Поскольку ОП, похоже, отказался от этой темы, мне все еще не ясно, что там нет путаницы с месячными датами. –

+0

@NickCox - совсем нет! Я добавлю более сильный отказ от ответственности. :) В некоторых пакетах нет хорошей поддержки даты и времени, поэтому пользователи заканчивают использование дат YYYYMMDD или других хаков. Anshu должен использовать Stata, как предполагалось и предложенную вами и Уильямом. Но в то же время это должно помочь ей сделать это. Один общий инструмент в моей области требует YYYYMMDD целых дат, поэтому я использую это довольно часто. –