【问题标题】:SAS - Change date format returned from databaseSAS - 更改从数据库返回的日期格式
【发布时间】:2023-03-24 07:17:01
【问题描述】:

我从许多以MM/DD/YYYY 格式(例如:8/21/200310/7/2013)存储日期的 Teradata 表中提取数据。 SAS 将它们返回为 DDMMMYYYY 或 DATE9 格式(例如:21AUG200307OCT2013)。有没有办法强制 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 格式返回。感谢您的帮助!

【问题讨论】:

  • 不,您不能在 PROC SQL 中轻松做到这一点。事后你可以很容易地做到这一点。您的示例代码只是复制表,因此如果您可以设置一个 libname 并使用数据步骤,那么您还有更多选项可以做到这一点。 SAS 9.4 确实添加了一种自动查找所有日期变量的方法,因此您可以更轻松地更改格式。
  • 也许在SELECT 子句中使用format?不确定 ODBC 是否允许,但 SAS 数据上的 proc sql 允许。这需要命名列而不使用星号:select mydate format=MMDDYY10., ... from ...
  • 作为@reeza,很难通过显式传递。作为您在 Teradata 中尝试的任何格式,当它移回 SAS 时,它通常是 date9。您可以创建具有 0 条记录的表,然后使用 proc 数据集并更改格式,然后进行插入。请尝试创建表 &x。 (sasdatefmt=(datecolumn='MMDDYY10.')),如果您已经知道您的日期列。
  • @Reeza 你指的是 FMTINFO 吗?看起来我可以将数据集存储在库中,然后使用该函数更改所有数据集的日期格式。
  • 是的,您可以使用 FMTINFO 来确定哪些变量是使用 CAT 选项的日期。

标签: sas odbc


【解决方案1】:

根据我的问题,我能够使用 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

【讨论】:

  • 如果您有合适的级别,您可以将其标记为答案。
  • 您似乎已从原始请求中的mmddyy. 格式切换为ddmmyy 格式。就我个人而言,我会标准化 date9yymmdd 格式以避免 mdy 或 dmy 顺序可能导致的混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多