SAS proq 中迄今为止的字符 sql

Char to date in SAS proq sql

我有 sql table 列和下一个观察结果:

AB_191007_01
AB_190930_02

我想将此列转换为另一列中格式为 yyyy-mm-dd 的日期。

proc sql;
CREATE TABLE result AS
SELECT input(compress(col_name,"AB_"), ANYDTDTE6.) AS col_date  format=yymmdd6.
FROM work.test
;quit;

之前的代码返回了一些奇怪的结果:

2009-06-18
1926-12-17
1926-12-17
2009-06-18
2006-08-18
2016-05-18
2011-03-19
1926-12-17

假设您想将字符AB_191007_01转换为日期2019-10-07,使用SCAN函数获取下划线之间的中间日期部分,然后INPUT as yymmdd6。然后,您可以根据需要更改格式(我使用 yymmdd10。)。

SELECT input(scan(col_name,2,"_"),yymmdd6.) AS col_date format yymmdd10.
  1. ANYDTDTE 信息格式取决于您的 DATESTYLE 选项(这又取决于 LOCALE),因此您应该指定它或使用其他固定位置信息格式,例如yymmdd6.
  2. 将 26 年读为 1926 年或 2026 年取决于您的 YEARCUTOFF 选项。
  3. compress() 编写的函数也压缩第二个 _,因此您提供给 input() 比预期更多的字符(尽管它不应该影响 .6 信息格式)。