SAS / SQL日期时间问题

时间:2015-11-09 16:54:15

标签: datetime sas

我正在尝试将日期时间变量拆分为日期和时间。

变量VitalSignTakenDateTime看起来像:

09JUN2010:08:05:00.000

通常我使用代码

data ex2;
set ex1;
specdate=scan(VitalSignTakenDateTime, 1, "");
spectime=scan(VitalSignTakenDateTime, 2, "");
run;

但是这不会起作用,因为它们被冒号而不是空格分开。有谁知道解决方案。

3 个答案:

答案 0 :(得分:2)

使用datepart和timepart:

 data _null_;
      dt='09JUN2010:08:05:00.000'dt;
      date=datepart(dt);
      time=timepart(dt);
      put date=date9. time=time10.;
    run;

答案 1 :(得分:1)

虽然我基本同意使用INPUT来提高效率,或者SUBSTR,因为这个位置很可能已经修复,但与您的代码最相似的结果是使用CALL SCAN

CALL SCANSCAN类似,不同之处在于它返回字符串的位置和长度(意思是,单词的第一个字符的位置加上该单词的长度),这意味着您可以使用SUBSTR在单词之后(或之前)获取单词

举个例子:

data ex2;
  input 
    @1 VitalSignTakenDateTime $18.;
  call scan(VitalSignTakenDateTime,1,pos,len,':');
  specdate=substr(VitalSignTakenDateTime,1,len);
  spectime=substr(VitalSignTakenDateTime,len+2);
  put _all_;
datalines;
09JUN2010:08:05:00.000
;
run;

答案 2 :(得分:0)

如果它是字符串和固定长度,您可以始终使用SUBSTR,但使用输入将值转换为日期时间,然后DATEPART和TIMEPART是最佳选项。