2016-11-26 58 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'列'訂單' – Patrick

+0

SAS將所有日期存儲爲數字,並簡單地將它們格式化爲輸出格式。但是,通過將格式更改爲使用YEARw格式的年份,您可以獲得所需的全部內容。與格式功能。 – JJFord3

+0

嗨,我會如何使用它?網上看過,但我不太明白。謝謝。 – Patrick

回答

0

由於您試圖將字符串「2014」分配給數字變量OrderDate,您將收到警告。 SAS可能成功地將「2014」轉換爲2,014,但由於您沒有更改格式,所以應將其顯示爲'07/07/1965',因爲自從01年1月01日起,這是2,014天的日期。

如果使用YEAR()函數來獲取日期值的年份,可能會更容易。

OrderYear = year(OrderDate); 

但是,你也可以只嘗試使用您現有的訂購日期變量YEAR.格式。

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

太棒了! @Tom 'data SortDates; set ClaraData; 格式OrderDate年。 ; 跑; proc print data = 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

該死的人提前三分鐘用相同的信息回答,仍然沒有得到接受的答案。 – JJFord3