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.
ANYDTDTE
信息格式取决于您的 DATESTYLE
选项(这又取决于 LOCALE
),因此您应该指定它或使用其他固定位置信息格式,例如yymmdd6
.
- 将 26 年读为 1926 年或 2026 年取决于您的
YEARCUTOFF
选项。
compress()
编写的函数也压缩第二个 _,因此您提供给 input()
比预期更多的字符(尽管它不应该影响 .6 信息格式)。
我有 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.
ANYDTDTE
信息格式取决于您的DATESTYLE
选项(这又取决于LOCALE
),因此您应该指定它或使用其他固定位置信息格式,例如yymmdd6
.- 将 26 年读为 1926 年或 2026 年取决于您的
YEARCUTOFF
选项。 compress()
编写的函数也压缩第二个 _,因此您提供给input()
比预期更多的字符(尽管它不应该影响 .6 信息格式)。