我正在尝试将日期时间变量拆分为日期和时间。
变量VitalSignTakenDateTime
看起来像:
09JUN2010:08:05:00.000
通常我使用代码
data ex2;
set ex1;
specdate=scan(VitalSignTakenDateTime, 1, "");
spectime=scan(VitalSignTakenDateTime, 2, "");
run;
但是这不会起作用,因为它们被冒号而不是空格分开。有谁知道解决方案。
答案 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 SCAN
与SCAN
类似,不同之处在于它返回字符串的位置和长度(意思是,单词的第一个字符的位置加上该单词的长度),这意味着您可以使用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是最佳选项。