2016-11-26 15 views
0

SASで完全な初心者を対象にしています。年間の日付範囲を「2014」、「2015」&「2016」に変換しようとしています。たとえば、2014年、2015年および2016年に多くの日付のある注文列があり、毎年の値をちょうど年の名前に変換したいとします。私が使用しようとしていたコードは以下の通りです。SASの日付の値を変更する

Data SortingDates; 
set work.ClaraData; 
if OrderDate <='31Dec2014'd then OrderDate = "2014"; 
if '01Jan2015'd <= OrderDate <= '31Dec2015'd then OrderDate= "2015"; 
if '01Jan2016'd <= OrderDate <= '31Dec2016'd then OrderDate = "2016"; 
run; 

しかし、このメッセージが来る:文字の値が...

によって与えられた場所で数値に変換されたプラスのデータを印刷する場合、日付はすべて1965年9月7日として出てきます

OrderDate列の形式は、「OrderDate Num 8 DDMMYY10。DDMMYY10」となっています。

ありがとうございます!

+0

「OrderDate」列は「Orders」ではありません – Patrick

+0

SASはすべての日付を数値として格納し、単純に出力にフォーマットします。しかし、YEARwという書式を使って書式を年に変更することで、必要なすべてを得ることができます。 format関数を使用します。 – JJFord3

+0

こんにちは、どうしたらいいですか?オンラインで見たことがありますが、私はそれを本当に理解していません。ありがとう。 – Patrick

答えて

0

数値変数OrderDateに文字列 "2014"を割り当てようとしたため、警告が表示されます。 SASはおそらく「2014」を2,014に変換しましたが、フォーマットを変更していないので、01JAN1960から2,014日であるため、'07/07/1965 'と表示されるはずです。

YEAR()関数を使用して日付値の年を取得すると、おそらく最も簡単です。

OrderYear = year(OrderDate); 

でも、既存のOrderDate変数にYEAR.形式を使用してみることもできます。

proc freq data=ClaraData ; 
    tables OrderDate ; 
    format OrderDate year. ; 
run; 
+0

素敵! @Tom 'データSortDates; は、ClaraDataを設定します。 フォーマット注文日の年。 ; 実行; proc印刷データ= SortDates; 実行; 「 これはすごくうまくいった! – Patrick

0

年の機能を試してみてください(このPDFの15ページ):https://www.sas.com/storefront/aux/en/spfunctionxexample/62857_excerpt.pdf

Data SortingDates; 
set work.ClaraData; 
OrderDate = YEAR(OrderDate); 
run; 

または日付として、それを維持するには、(同じPDFのページ8のような)年の形式を試してみてください

Data SortingDates; 
set work.ClaraData; 
format OrderDate YEARw.; 
run; 
+0

くそっと同じ情報で3分早く返事があったが、それでも受け入れられた答えが得られなかった。 – JJFord3