Sas 将难看的字符串转换为日期

Sas 将难看的字符串转换为日期,sas,Sas,我在数据集中有一些日期时间是丑陋的字符串 示例:“2017年1月14日星期六00:00:00” 我想将其转换为日期,例如2017年1月14日 还有比正则表达式更简单的解决方案吗 如果您想要确切的yyyymmdd,那么您需要创建自己的格式来实现这一点,但是如果您对内置格式感到满意,那么应该执行以下操作。只需跳过一周中的某一天,然后使用信息转换其余的日期: data _null_; mytxtdate = "Saturday 14 Jan 2017 00:00:00"; mydate = input

我在数据集中有一些日期时间是丑陋的字符串

示例:“2017年1月14日星期六00:00:00”

我想将其转换为日期,例如2017年1月14日


还有比正则表达式更简单的解决方案吗

如果您想要确切的
yyyymmdd
,那么您需要创建自己的格式来实现这一点,但是如果您对内置格式感到满意,那么应该执行以下操作。只需跳过一周中的某一天,然后使用信息转换其余的日期:

data _null_;
mytxtdate = "Saturday 14 Jan 2017 00:00:00";
mydate = input(compress(substr(mytxtdate,index(mytxtdate,' '))),date9.);
format mydate yymmdd10.;
put _all_;
run;
这当然很尴尬。我想知道是否有一种方法可以作为一个使用少于4个数据步函数的单行程序来实现这一点。这里的逻辑是:

  • 使用
    索引
    跳到第一个空格
  • 使用
    substr
    compress
  • 使用
    date9.
    informat作为SAS日期输入,它只查看结果字符串的前9个字符,忽略其余字符

如果您确实想要
yyyymmdd
,那么您需要创建自己的格式来实现这一点,但是如果您对内置格式感到满意,那么下面的操作应该可以完成。只需跳过一周中的某一天,然后使用信息转换其余的日期:

data _null_;
mytxtdate = "Saturday 14 Jan 2017 00:00:00";
mydate = input(compress(substr(mytxtdate,index(mytxtdate,' '))),date9.);
format mydate yymmdd10.;
put _all_;
run;
这当然很尴尬。我想知道是否有一种方法可以作为一个使用少于4个数据步函数的单行程序来实现这一点。这里的逻辑是:

  • 使用
    索引
    跳到第一个空格
  • 使用
    substr
    compress
  • 使用
    date9.
    informat作为SAS日期输入,它只查看结果字符串的前9个字符,忽略其余字符

您的代码将日期输出为“2002-01-14”,这是错误的年份。月份和日期可以吗?这很有效。非常感谢。如果我发现短一点的,我会调整它并更新。你的代码输出的日期是“2002-01-14”,这是错误的年份。月份和日期可以吗?这很有效。非常感谢。如果我发现短一点的,我会调整一下并更新。