2016-05-04 17 views
0

Ich habe eine Spalte mit Daten. Zum Beispiel 08/2000 mit Datumsformat. Wie konvertiere ich sie in numerische Form 082000? Ich folge einer Richtlinie im Internet, aber es ist nicht korrekt.SAS, Datum in Nummer konvertieren

ASOFDT_temp=datepart(ASOFDT); 
ASOFDT_Num=putn(ASOFDT_temp,'yymmn6.'); 
+0

'08/2000 'sieht nicht wie ein Datum für mich aus. Sieht wie eine Zeichenvariable aus. Auch warum speichern Sie eine Nummer mit dem Monat vor dem Jahr? Wenn Sie es wirklich in einer Nummer speichern möchten, verwenden Sie Ziffern wie YYYYMM oder YYYYMMDD, damit Sie keine Probleme mit führenden Nullen oder Sortierungen haben. – Tom

+0

Als du, Tom. Ich überprüfe es noch einmal. Sein Typ ist Datum. Ich nehme Ihren Ratschlag, es zu YYYYMM zu ändern, aber wenn Sie Zeit haben, könnten Sie mir erklären, welche möglichen Probleme durch führende Nullen verursacht werden? – user1481397

+0

Tom, danke. Ich habe das Problem schon gesehen. Siehe meine Antwort auf Joe unten :) – user1481397

Antwort

0

Ein guter Weg ist, VVALUE zu verwenden, wenn sie bereits ein Format haben. vvalue übernimmt den formatierten Wert einer Variablen.

ASOFDT_num = input(compress(vvalue(ASOFDT),'/'),6.); 

compress entfernt den Schrägstrich und input macht es eine Nummer. putn wird nicht funktionieren, da es eine Zeichenvariable (input -> Nummer, put -> Zeichen, fast immer) macht.

+0

Joe, dein Code funktioniert. Ist es möglich, das Jahr und das Datum zu wechseln, um die Nummer als JJJJMM zu definieren? Wie Tom in seiner Antwort erwähnte, verursachte das Führen von 0 ein Problem. 012000 als 12000 aufgezeichnet. Wie auch immer, um es zu 200001 zu ändern? – user1481397

+0

Sicher, formatieren Sie das Datum entweder neu, um yyyymmn6 zu sein. Oder benutze substr. – Joe

+0

Danke. Ich habe es in einer peinlichen Weise getan, aber ich bekomme, was ich will, – user1481397

0

Wenn das ursprüngliche Feld wirklich ein DATUM ist, können Sie es an Ort und Stelle konvertieren, da es bereits ein numerisches Feld ist.

Sie könnten es mit PUT und INPUT Funktionsaufrufen tun.

Oder Sie könnten ein wenig Arithmetik verwenden.

asofdt = year(asofdt)*100 + month(asofdt); 

Denken Sie daran, das Datumsformat aus den Variablen zu löschen, die es wie '08/2000' aussehen machen durch eine FORMAT-Anweisung.

format asofdt ;