2017-04-07 32 views
0

私は、文字の書式を使用してさまざまな値を取る変数start dateを持つデータセットを持っています。SASの日付の書式

私は2つの異なる日付の値を持つ2つの新しい列に日付変数を変換したいので、私は、開始日の列の値を使用してデータセットを分割している:

if length(Startvalue) = 6 then output a6; 
else if length(Startvalue) = 8 then output a8 ; 
else if length(Startvalue) = 1 then output a1; 
else output a_other; 

一つの値は、次のように書かれています:090209(DDMMYY)

変数をdate9とdate9の両方にフォーマットします。フォーマットとDDMMYYD10があります。このような形式:

FORMAT Startvalue2 date9.; 
format Startvalue3 DDMMYYD10.; 

は、私はそれがデータステップで、このアプローチで動作するようになった:

FORMAT Startdato2 date9.; 
format startdato3 DDMMYYD10.; 
Startdato2 = INPUT(PUT(Startdato,6.),DDMMYY6.); 
Startdato3 = INPUT(PUT(Startdato,6.),DDMMYY6.); 

別の値は、次のように書かれている:15-08-17(DD-MM-YY) 私もこのように、この値は上の2つのフォーマットをしたい:

FORMAT Startvalue2 date9.; 
format Startvalue3 DDMMYYD10.; 

しかし、ここで私は上から私の表現のコピーを使用することはできません。

FORMAT Startvalue2 date9.; 
format Startvalue3 DDMMYYD10.; 
Startvalue2 = INPUT(PUT(Startvalue,8.),DDMMYYDw.); 
Startvalue3= INPUT(PUT(Startvalue,8.),DDMMYYDw.); 

あなたはその理由を知っていますか?そして、私はどのようにして価値観を日付に変換することができますか?フォーマットとDDMMYYD10フォーマット?

種類は、あなたがinputを使用しているときput文で数値に値を変換する必要はありませんマリア

答えて

1

について。 inputの目標は、文字入力を受け取り、SASが数学を行うための数値に変換することです。

  • プット::私は常にそれを覚えてどのようにを入れた数値
  • プットの値を変換しますは文字値
  • として数値を置くアウト

さらに簡単な解決方法は、anydtdte. informatを使用することです。これは、任意の次informatsを読み取ることができる:

  • 日時
  • DDMMYY
  • JULIAN
  • MDYAMPM
  • MMDDYY
  • MMxYY
  • MONYY
  • TIME
  • YMDDTTM
  • YYMMDD
  • YYQ
  • YYxMM
  • 月、日、年

例えば:

%let default_datestyle = %sysfunc(getoption(datestyle)); 

options datestyle=DMY; 

data want; 
    set have; 

    Startdato2 = INPUT(Startdato, anydtdte.); 
    Startvalue2 = INPUT(Startvalue, anydtdte.); 

    Startdato3 = Startdato2; 
    Startvalue3 = Startvalue2; 

    <rest of code>; 

    format Startvalue2 date9. 
      Startvalue3 ddmmyyd10. 
      Startdato2 date9. 
      Startdato3 ddmmyyd10. 
    ; 
run; 

options datestyle = &default_datestyle; 

はそのinformat試してみて、それができるかどうかを確認すべてを得る。そうでない場合は、条件付きロジックを使用して特殊ケースを考慮に入れることができます。

+0

お返事ありがとうございます。このメソッドを21-09-17の値に使用すると、次の出力が得られます。 17SEP2021 \t 17-09-2021 これは私が望むものではありません。 21SEP2017および21-09-2017 – user1626092

+0

anydtdteから取得する必要があります。ドキュメント: "01-02-03や01-02のような入力データは、月、日、年に関して曖昧である可能性があります。この場合、DATESTYLEシステムオプションは月、日、そして年。これを反映するようにコードを更新しました。 –

+0

さて、それは動作します!ありがとうございます - 私は追加されたコードを理解しているかどうかわかりませんが、私は受け入れます - そして私は幸せです:) – user1626092