SAS proc SQL中将datetime类型时间提取小时并转为数值的问题咨询
问题根因
- SAS中的
timepart()函数返回值为当日0点到对应时间的总秒数,你给返回值附加了time2.输出格式,所以视觉上显示为10,但变量底层实际存储的数值是10*3600=36000,并非你需要的10。 - 后续转换得到3的原因:使用未指定长度的
best.格式输出36000时,会默认转为短科学计数法格式3.6E4,再用input()读取时仅识别到首位的3,因此得到错误结果。
正确解决方法
方法1(推荐):直接调用hour()函数处理原始datetime变量
hour()可以直接从datetime类型变量中提取数值型的小时数,一步得到结果,代码如下:
proc sql; create table def as select hour(x) as x from 你的原表名; quit;
方法2:基于timepart()的结果计算
如果你需要保留timepart()的处理逻辑,可以将返回的秒数除以3600后取整,得到小时数:
proc sql; create table abc as select int(timepart(x)/3600) as x from 你的原表名; quit;
以上两种方法得到的x都是数值类型,取值为10,符合需求。
内容的提问来源于stack exchange,提问作者gjsaafa
相关产品推荐
相关产品推荐

