我希望能够以这种方式转换整个日期列。例如,2017年1月1日至2017年1月1日。我意识到有一种令人费解的方式做到这一点,但我不完全确定我将如何接近逻辑。此外,是否有一种SAS格式可以做到这一点?感谢。
答案 0 :(得分:0)
确实可以使用您可以使用的格式。这是一个使用测试数据的工作示例:
data test;
input datestring $;
datalines;
01/01/2017
;
run;
使用输入将字符串值转换为SAS日期,然后使用put函数创建一个包含您要查找的表示的字符变量:
data test2;
set test;
date_as_date = input(datestring,ddmmyy10.);
date_formatted = put(date_as_date,worddate20.);
run;
数字20用于描述足够长以保持完整值的长度,使用较小的数字可能会导致截断,例如
date_formatted = put(date_as_date,worddate3.);
put date_formatted=;
dateformatted=Jan
答案 1 :(得分:0)
在某些情况下,可能不存在所需的日期格式(在这种情况下,它确实是' worddate20。'),但作为示例......
您可以编写一个函数式宏来将SAS日期转换为" monname + day,year"格式,例如
%MACRO FULLMDY(DT) ; catx(', ',catx(' ',put(&DT,monname.),put(&DT,day.)),put(&DT,year4.)) %MEND ; data example1 ; dt = '26jul2017'd ; fulldate = %FULLMDY(dt) ; run ;
或者,您可以构建自定义格式,涵盖数据中可能存在的所有日期,例如
data alldates ; retain fmtname 'FULLMDY' type 'N' ; do dt = '01jan1900'd to '01jan2100'd ; mdy = catx(', ',catx(' ',put(dt,monname.),put(dt,day.)),put(dt,year4.)) ; output ; end ; rename dt = start mdy = label ; run ; proc format cntlin=alldates ; run ; data example2 ; dt = '26jul2017'd ; format dt fullmdy. ; run ;