2016-04-23 79 views
1

日付の書式でStataに問題があります。私はそれは非常に単純な質問だと信じていますが、私はそれを修正する方法を見ることができません。月の日付をStataに変換する

私はV1の形式はDD/MM/YYYYです

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 

のように見えるcsvファイル(file.csvになり)を持っています。

私はimport delimited ...file.csv

V1を使用してStataの中のファイルをインポートするには、v2はフロートで、文字列変数です。

私は月にのStataが読むことができる日付でv1を変換したいと思います。

私の試み:

1)

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

私に間違って見えます

Time 
3177m7 
3180m2 
3182m7 
... 

を与えます。全く同じ結果を与える代替

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 

2)。

そして、私は

tsset Time, format(%tm) 

を入力した場合にはギャップがあるが、データにギャップがないことを私に伝えます。

私が間違っていることを理解するのに役立つでしょうか?

答えて

4

Stataの日付と時刻はwonderful documentationです。時間関連の変数を使用する予定がある場合は、最初から最後まで読む必要があります。このドキュメントを読むだけであなたの現在の問題を解決することはできませんが、将来的にはコストのかかるエラーを防ぐことができます。あなたの質問に関連するセクションは「SIF-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は、1日または1か月のように書式設定して使用できる数字にすぎないことに注意してください。「一日数」から「月の番号を」取得するには、次の操作を行います。

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

変数mtは今等しい

516 2003年1月1月1960年から516ヶ月のStataの「エポックタイム」1月1日であり、 1960 00:00:00.000。日付変数はエポック時刻から日数として格納され、datetime変数はエポック時刻からミリ秒として格納されます。月変数は、エポック時間以降に月として格納することができます(つまり、 %tmの書式設定により、どの月を表示するかが決まります)。

関連する問題