2016-05-04 60 views
0

日付の列があります。たとえば、日付形式の08/2000です。 082000に数値形式に変換するにはどうすればよいですか?私はインターネット上のいくつかのガイドラインに従っていますが、それは正しくありません。SAS、日付を数字に変換

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

'08/2000 'は私の日付のようには見えません。文字変数のように見えます。また、なぜその年の前の月に番号を格納するのですか?実際に数値に格納する場合は、YYYYMMやYYYYMMDDなどの数字を使用して、先行ゼロまたはソートに問題がないようにします。 – Tom

+0

あなたより、トム。私はもう一度それをチェックする。その型は日付です。 YYYYMMに変更するようにアドバイスしますが、時間がある場合は、先行ゼロによって引き起こされる潜在的な問題を教えてください。 – user1481397

+0

トム、ありがとう。私はすでに問題を見ている。以下のJoeへの私の返事を見てください:) – user1481397

答えて

0

VVALUEを使用することをお勧めします(既にVVALUEにフォーマットがある場合)。 vvalueは、変数のフォーマットされた値をとります。

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

compress

は、スラッシュを削除し、 inputは数になります。 putnは、文字変数( input - >番号、 put->文字、ほとんどの場合)を作成するため、機能しません。

+0

Joe、あなたのコードが動作します。 YYYYMMのように年と日付を切り替えることは可能ですか? Tomが彼の返答で述べたように、0をリードすると問題が発生しました。 12000として記録された012000。とにかくそれを200001に変更するには? – user1481397

+0

もちろん、日付varをyyyymmn6に再フォーマットしてください。またはsubstrを使用します。 – Joe

+0

ありがとうございます。私は厄介な方法でそれをやったが、私が望むものを得る。 – user1481397

0

元のフィールドが実際にDATEの場合、既に数値フィールドであるため、元のフィールドをDATEに変換できます。

PUTおよびINPUT関数呼び出しを使用して実行できます。

asofdt = INPUT(PUT(asofdt,YYMMn6.),6.); 

または少しの演算を使用できます。

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

は、FORMATステートメントを使用して'08/2000' のようになりつつある変数から日付形式をクリアすることを忘れないでください。

format asofdt ;