2016-11-26 64 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