2016-11-08 28 views
0

の間、私はStataのにSQL(date1)から文字列として日付変数をインポートして、このような新しい日付変数(date2)を作成しました:日の日付計算

gen double date2 = clock(date1, "YMDhms") 
format date2 %tc 

しかし、今、私は数を計算したいです上記のようにフォーマットされた2つの日付(date3-date2)の間の日ですが、私はそれを行うように見えません。

私はhmsについて気にしないので、おそらく私はまずそれを取り除くべきでしょうか?そして、別の変数としてYYYY MM DDに日付を分解しますか?私がやっているようなことは今働いていません。

+0

あなたは 'daily()'を使ってStataの日付に変換し、その2つを引くことができます。 'help datetime'から直接' date1 - date1 = date1とdate2'の間の日を見ることができます。同じことがdatetimesの場合、2つのdatetimes、week1とweek2の間の週、月などの間にミリ秒を得ることができます。 – ander2ed

答えて

1

実際にはtimestamp(別名datetime)変数のようなものです。私の経験では、ODBCとStataはSIF td/tcフォーマットへの変換をうまく処理するので、通常は文字列として日付/タイムスタンプをキャストする必要はありません。

しかし、おそらく、テキストファイルにエクスポートしてから、代わりにデータを読み込んでいる可能性があります。ここにいくつかのソリューションがあります。

tcタイムスタンプは、1000 * 60 * 60 * 24 = 86,400秒/日(つまりうるう秒を無視)と仮定して、01jan1960 00:00:00.000からのミリ秒単位です。つまり、経過日数を取得するには、その差額をその数で除算する必要があります。例えば

、2016年がうるう年だった:

. display (tc(01jan2017 00:00:00) - tc(01jan2016 00:00:00))/(1000*60*60*24) 
366 

また、タイムスタンプのうちの日付を作り、除算を省略するdofc()機能を使用することができます。

. display (dofc(tc(01jan2018 00:00:00)) - dofc(tc(01jan2016 00:00:00))) 
731 

2017閏年ではありません366 + 365 = 731日となります。

generateをこれらのすべての機能とともに使用できますが、displayは初期の試行をデバッグする方が簡単です。

+0

ありがとう!それはうまくいった。ミリ秒単位だったので、私は86,400,000で割る必要があった。 – EconoQ