首页 > 解决方案 > SAS - 更改从数据库返回的日期格式

问题描述

我从许多以MM/DD/YYYY格式(例如:8/21/2003、、10/7/2013)存储日期的 Teradata 表中提取数据。SAS 将它们返回为DDMMMYYYY或 DATE9 格式(例如:21AUG2003、、07OCT2013)。有没有办法强制 SAS 将日期变量返回为MM/DD/YYYY或 MMDDYY10 格式?我知道我可以为特定列手动指定它,但我设置了一个宏来为 65 个不同的表执行相同的查询:

%macro query(x);

proc sql;
    connect using dbase;
    create table &x. as select * from connection to dbase
        (select *
        from table.&x.);
    disconnect from dbase;
quit;


%mend(query);
%query(bankaccount);
%query(budgetcat);
%query(timeattendance);

其中一些表将具有日期变量,而有些则没有。所以我希望MMDDYY10默认情况下将值作为格式返回。谢谢你的帮助!

标签: sasodbc

解决方案


根据对我的问题的评论,我能够使用 FMTINFO 函数解决这个问题。我几乎使用了相同的代码:

proc contents data=mylib._all_ noprint out=contents;
run;

data _null_;
  set contents;
  where fmtinfo(format,'cat')='date';
  by libname memname ;
  if first.libname then call execute(catx(' ','proc datasets nolist lib=',libname,';')) ;
  if first.memname then call execute(catx(' ','modify',memname,';format',name)) ;
  else call execute(' '||trim(name)) ;
  if last.memname then call execute(' DDMMYYS10.; run;') ;
  if last.libname then call execute('quit;') ;
run;

在这里找到: https ://communities.sas.com/t5/SAS-Procedures/Change-DATE-formats-to-DDMMYYS10-for-ALL-unknown-number-date/td-p/366637


推荐阅读