【发布时间】:2023-03-24 07:17:01
【问题描述】:
我从许多以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 格式返回。感谢您的帮助!
【问题讨论】:
-
不,您不能在 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 选项的日期。