2016-04-23 16 views
1

Ich habe ein Problem in Stata mit dem Format der Daten. Ich glaube, es ist eine sehr einfache Frage, aber ich kann nicht sehen, wie ich es beheben kann.Transform Zeichenfolge Monatsdaten in Stata

Ich habe eine CSV-Datei (file.csv), die wie

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 

Die Form v1 sieht tt/mm/jjjj ist.

ich die Datei in Stata importieren import delimited ...file.csv

v1 mit einem String-Variable ist, ist v2 ein Schwimmer.

Ich möchte v1 in einem monatlichen Datum ändern, das Stata lesen kann.

Meine Versuche:

1)

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

die mich

Time 
3177m7 
3180m2 
3182m7 
... 

gibt, die falsch aussieht.

2) In alternativen

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 

, die genau das gleiche Ergebnis ergibt.

Und wenn ich

tsset Time, format(%tm) 

geben Sie es sagt mir, dass es Lücken gibt, aber es gibt keine Lücken in den Daten.

Können Sie mir helfen zu verstehen, was ich falsch mache?

Antwort

4

Stata hat wonderful documentation auf Daten und Zeiten, die Sie von Anfang bis Ende lesen sollten, wenn Sie planen, zeitbezogene Variablen zu verwenden. Das Lesen dieser Dokumentation wird nicht nur Ihr aktuelles Problem lösen, sondern auch kostspielige Fehler in der Zukunft verhindern. Der Abschnitt zu Ihrer Frage hat den Titel "SIF-zu-SIF-Konvertierung". SIF bedeutet "Stata interne Form".

Ihr aktuelles Problem zu erklären:

Stata speichert Daten als Zahlen; Sie interpretieren sie als "Daten", wenn Sie ein Format zuweisen. Beachten Sie Folgendes:

set obs 1 
gen dt = date("01/01/2003", "DMY") 
list dt 
// 15706 

Damit Datum der Wert seinen 15706. Let Format zugeordnet ist wie ein Tag aussehen:

format dt %td 
list 
// 01jan2003 

Nun wollen wir es formatiert einen Monat zu sein:

format dt %tm 
list 
// 3268m11 

Beachten Sie, dass dt nur eine Nummer ist, die Sie wie einen Tag oder einen Monat formatieren und verwenden können.Um einen „Monat Nummer“ zu erhalten von einem „Tag-Nummer“, gehen Sie wie folgt vor:

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

Die Variable mt jetzt gleich 516. Januar 2003 beträgt 516 Monate Januar 1960. Stata die „Epoche der Zeit“ ist der 1. Januar 1960 00: 00: 00.000. Datumsvariablen werden als Tage seit der Epochenzeit gespeichert, und Datetime-Variablen werden seit der Epoche als Millisekunden gespeichert. Eine Monatsvariable kann als Monate seit der Epoche gespeichert werden (so bestimmt die %tm Formatierung, welcher Monat angezeigt werden soll).