【问题标题】:Add timestamp to MMDDYY10. column in PROC SQL (SAS E Guide)将时间戳添加到 MMDDYY10。 PROC SQL 中的列(SAS E 指南)
【发布时间】:2015-09-18 17:45:51
【问题描述】:

我在使用 PROC SQL 为日期添加时间时遇到问题。使用 PROC SQL,我要提取的列被格式化为MMDDYY10.。我需要将 x 天、y 小时和 z 分钟添加到该日期。我现在最大的问题是附上一个归零的时间戳。

我保证,在来到这里之前,我已经浏览了整个网络,但没有什么是我真正需要的。我觉得疯了,这似乎不应该是那么难做的事情!

我最接近目标的是使用:

SELECT
    DHMS(myDateVar,0,0,0) AS myDateVar FORMAT = DATETIME22.
FROM
    tableName

但是,这只是返回我的日期变量(现在只是今天),随机时间为20:48:37

最终,被选择的数据集将被附加到一个被 SAS 识别为DATETIME22. 格式化列的 SQL 服务器表中。

那么,谁能帮我在日期MMDDYY10. 中添加 x 天、y 小时和 z 分钟PROC SQL 选择语句?

【问题讨论】:

  • 我相信您只需将格式更改为datetime22.。你的小数点放错地方了
  • @RobertPenr​​idge 抱歉,这是一个错字。我会在编辑中修复它。

标签: datetime sas proc-sql enterprise-guide


【解决方案1】:

即使使用 Tom 的建议修复方法,我也无法复制您的问题。您的日期变量很可能有问题。它是 SAS 日期变量吗?您可以使用 DHMS 功能添加小时、分钟和秒,并使用 INTNX 功能添加天。

proc sql;
create table want as
select dhms(date, 0, 0, 0) as mydate format=datetime22.,
        dhms(today(), 0, 0, 0) as mydate2 format=datetime22.
from sashelp.stocks;
quit;

proc print data=want(obs=20);
var mydate:;
run;

编辑: 当您从 Excel 中引入“日期”变量时,它有一个小数部分。不知道为什么,但您可以通过使用 floor() 函数来修复它,以便仅获取您正在寻找的数字和答案。我强烈建议您先解决该问题,因为您可能错误地导入了日期,或者 SAS 可能会错误地解释它。

data have;
format date date9.;
input date;
cards;
10918.12
10918.23
10918.58
;
run;
proc print data=have;
run;

data want;
set have;
date_new=dhms(date, 0,0,0);
format date_new datetime22.;
date_want=dhms(floor(date), 0, 0,0);
format date_want datetime22.;
run;
proc print; run;

【讨论】:

  • 对,对我来说今天()也可以正常工作,但是当我使用 MMDDYY10.列中的日期,它只是添加该随机时间戳。我正在使用 proc sql 修改的数据是从 excel 表中导入的,所以那里肯定发生了一些有趣的事情。
  • 把变量的格式去掉,看一下。它已经有小数部分了吗?
  • Excel 将日期时间表示为整数天、一天的小数部分(时间部分)。不过,SAS dhms 应该可以正常工作。
  • 所以 Excel 中的日期很可能是一个日期时间,很可能是错误导入的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多