2016-07-15 263 views
0

感覺就像一個明顯的問題,但Stata的幫助沒有得到答案。大多數Stata用戶有興趣將非日期變量轉換爲日期變量,但我想要的是相反的。將日期變量轉換爲數字

我有一個日期變量date,型長,格式%tdCCYYNN。我試圖將其附加到數據集中,其中相同變量date的類型較長,格式爲%12.0g。爲了準確地做到這一點,我需要將第一個數據集中的date%tdCCYYNN轉換爲%12.0g。當我做format %12.0g date時,date值更改爲不正確的值。

比方說,在第一個數據集中,我有date=201204。我仍然希望它讀取201204,就像%12.0g變量一樣。有沒有辦法做到這一點?

+4

你有問題倒退。如果第二個數據集中的數字看起來像201607,但格式爲%12.0g,則它們不是Stata日期值,因此不能這樣使用。您需要將這些值轉換爲Stata日期值,例如您正在追加的數據集中的日期值。 – 2016-07-15 20:22:51

+4

如果您還沒有這樣做,那麼您可以按照「幫助日期時間」的指導工作,這無疑是我係統中訪問次數最多的文檔,第二次訪問是第24章(處理日期和時間)* Stata用戶指南* PDF可從Stata的「幫助」菜單中的PDF文檔項獲得。在使用日期和時間之前,任何Stata用戶都應該仔細閱讀非常詳細的第24章。之後,幫助文檔通常足以指明方向。 – 2016-07-15 20:23:01

+4

更改顯示格式不會**完全改變該值。討論在http://www.stata-journal.com/sjpdf.html?articlenum=dm0067一個更基本的問題是像201204這樣的值不能是每天的日期。請參閱http://www.statalist.org/forums/help#stata,其中提供了有關顯示數據示例的提示,以使您的問題清晰明瞭。 –

回答

2

我+1以上所有評論由尼克和威廉,並建議你閱讀help datetime。我一直在使用Stata幾年,仍然經常訪問這個幫助文件。 Stata的日期/時間功能非常棒,您可以從早期學習而不是晚些時候獲益。

我會將其他數據轉換爲Stata日期格式真的是。但是,如果您需要將日期轉換爲「整數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'作爲日期格式。沒有特定的原因,使用壓制信息的日期格式似乎是不正確的。由於OP似乎已經放棄了這個線程,因此我仍然不清楚在那裏每月的日期不會混淆。 –

+0

@NickCox - 一點都沒有!我將添加更強的免責聲明。 :)某些套件沒有良好的日期/時間支持,因此用戶最終會使用YYYYMMDD日期或其他黑客行爲。安舒應按照你和威廉的預期和建議使用Stata。但同時,這應該可以幫助她完成任務。我的領域中的一個常用工具需要YYYYMMDD整數日期,所以我經常使用它。 –

相關問題