【问题标题】:Char to date in SAS proq sqlSAS proc sql中的迄今为止的字符
【发布时间】:2019-10-07 09:22:38
【问题描述】:

我有一列带有下一个观察的 sql 表:

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

【问题讨论】:

    标签: sql sas proc-sql


    【解决方案1】:

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

    SELECT input(scan(col_name,2,"_"),yymmdd6.) AS col_date format yymmdd10.
    

    【讨论】:

    • Ty,我通过 ''' SELECT input(substr(col_name,4,6),yymmdd6.) AS col_date format yymmdd10 得到它。 '''
    【解决方案2】:
    1. ANYDTDTE 信息取决于您的 DATESTYLE 选项(这又取决于 LOCALE),因此您应该指定它或使用另一个固定位置信息,例如yymmdd6
    2. 将 26 年读取为 1926 或 2026 取决于您的 YEARCUTOFF 选项。
    3. compress() 编写的函数还压缩了第二个 _,因此您向 input() 提供的字符比预期的要多(尽管它不应该影响 .6 信息)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      相关资源
      最近更新 更多