我已经从发送给我的一些Excel电子表格中将一些数据导入SAS。当我查看导入表的输出时,日期显示为" 01APR2014"并保持按时间顺序排列。当我查看列属性时,类型是"日期"长度为8.格式和信息都是DATE9。
我需要能够将这个日期转换为周年和月 - 年,但无论我尝试什么,我总是得到1960年1月。
使用proc sql,我使用下面的内容来获取周年,
"(放(日期部分(a.fnlz_date),weeku3))|| " - " ||(put(datepart(a.fnlz_date),year。))为FNLZD_WK_YR,"
但我得到的只是" W00-1960"。我之前已使用SAS日期时间值多次成功使用上述公式。
对于今年,使用proc sql,我尝试了
" datepart(a.fnlz_date)as DT_FNLZD format = monyy。,"
但唯一返回的值是" JAN60"。
我也尝试过使用SUBSTR,但是错误地说它需要一个字符参数,所以SAS必须至少将它看作一个数字。
我的问题;有没有人知道从这种格式获得一周和/或一个月的方法?如果是这样,怎么样?我并不反对使用数据步骤,但我也无法让它工作。
提前感谢您提供的任何帮助或见解。
答案 0 :(得分:1)
datepart
将datetime
转换为date
s。这里没用。
如果你只是显示这个,那么你有几个选择,特别是月份。您只需更改变量的格式(这会更改显示的内容,但不会更改基础值;请将此值视为值标签)。
当你像这样使用它时(再次,看起来你已经完成了大部分工作):
proc sql;
select datevar format=monyy5. from table;
quit;
除非您有日期时间,否则请不要包含datepart
函数调用。 (日期=自1960年1月1日以来的天数,日期时间=自1960年1月1日起的秒数:00:00:00)。
将显示MONYY5。格式,即2010年5月的MAY10。您还有其他一些格式选项,有关详细信息,请参阅the documentation on formats by category。
我无法想到符合您想要的周格式(有周格式,如WEEKW.,正如您清楚发现的那样,但我不知道他们确切地做了什么你想要。所以,如果你想自己建一个,你可以建立一个自定义的图片格式,或者你可以创建一个字符串。
构建自定义图片格式并不太难;请参阅the documentation on Picture formats或Google SAS日期图片格式。
proc format;
picture weekyear (default=8)
low-high = 'W%0U-%Y' (datatype=date) ;
quit;
现在您可以将其用作普通格式。
获得周/等。要构建值,您还可以使用函数week()
,month()
等,如果这更容易。
答案 1 :(得分:0)
由于数据已经是日期格式,我只需要删除仅适用于datetime值的DATEPART函数。所以,对于一个月,
“a.fnlz_date as fnlz_mnth format = monyy。”,
给了我正在寻找的结果。
干杯!