将月/日/年转换为SAS中的MonthName DayNumber、ForwardNumber

将月/日/年转换为SAS中的MonthName DayNumber、ForwardNumber,sas,Sas,我希望能够以这种方式转换整列日期。例如,2017年1月1日至2017年1月1日。我意识到有一种复杂的方法可以做到这一点,但我不完全确定我该如何从逻辑上做到这一点。另外,是否有一种SAS格式可以实现这一点?谢谢。确实有一种格式可以使用。下面是一个使用测试数据的工作示例: data test; input datestring $; datalines; 01/01/2017 ; run; 使用输入将字符串值转换为SAS日期,然后使用put函数创建一个字符变量,该变量保存您要查找的表示

我希望能够以这种方式转换整列日期。例如,2017年1月1日至2017年1月1日。我意识到有一种复杂的方法可以做到这一点,但我不完全确定我该如何从逻辑上做到这一点。另外,是否有一种SAS格式可以实现这一点?谢谢。

确实有一种格式可以使用。下面是一个使用测试数据的工作示例:

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

在某些情况下,所需的日期格式可能不存在(在本例中,它是“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 ; %宏满mdy(DT); catx(‘,’,catx(‘,put(&DT,monname.),put(&DT,day.)),put(&DT,year4.)) %修补; 数据示例1; dt='2017年7月26日'd; fulldate=%FULLMDY(dt); 跑 或者,您可以构建一个自定义格式,涵盖数据中可能存在的所有日期,例如

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 ; 所有日期的数据; 保留fmtname“FULLMDY”类型“N”; do dt='01jan1900'd至'01jan2100'd; mdy=catx(‘,’,catx(‘,put(dt,monname.),put(dt,day.)),put(dt,year4.); 产出; 结束; 重命名dt=start mdy=标签; 跑 过程格式cntlin=所有日期;跑 数据例2; dt='2017年7月26日'd; 格式dt fullmdy; 跑
将来请展示你的尝试。如前所述,此问题不符合SO规则