更改SAS中的日期值

时间:2016-11-26 15:26:12

标签: date sas

SAS的新手和我尝试将年度日期范围转换为" 2014"," 2015" &安培; " 2016&#34。例如,我在2014年,2015年和2016年有一个包含大量日期的订单列,并希望将每年的值转换为年份的名称。我试图使用的代码如下。

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;

然而,此消息出现:字符值已在......

给出的位置转换为数值

另外,在打印数据时,日期全部显示为 09/07/1965

OrderDate列格式正确为&#34; OrderDate Num 8 DDMMYY10。 DDMMYY10&#34;

谢谢!

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您收到警告是因为您尝试分配字符串&#34; 2014&#34;到数字变量OrderDate。 SAS可能成功转换了#34; 2014&#34;为你准备了2,014,但由于你没有改变格式,它应该显示为&#39; 07/07/1965&#39;因为这是自01JAN1960以来的2,014天。

如果您使用YEAR()函数获取日期值的年份,这可能是最简单的。

OrderYear = year(OrderDate);

但您也可以尝试在现有的OrderDate变量上使用YEAR.格式。

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