【问题标题】:SAS merge on date and timeSAS 合并日期和时间
【发布时间】:2014-12-04 04:23:04
【问题描述】:

我正在尝试根据日期和时间合并两个数据集。

在这两个集合中,日期都是 date9。格式,时间为time5。格式。

我认为像下面这样的简单合并就足够了。

我猜 SAS 正在将日期读取为日期时间和以秒为单位的时间。

data test;
merge JRA_UK_July_spot (in=a)
UK_surveys_30plus (in=b);
by date time_num;
if a and b;
run;

我在合并表中没有记录。

注意:从数据集 WORK.JRA_UK_JULY_SPOT 中读取了 19517 个观测值。 注意:从数据集 WORK.UK_SURVEYS_30PLUS 中读取了 114235 个观察值。 注意:数据集 WORK.TEST 有 0 个观测值和 14 个变量。

我知道有些记录应该匹配。

从表 a

time_num   date
9:07       01JUL2014
9:07       01JUL2014

来自表 b

date        time_num
01JUL2014   9:07
01JUL2014   9:07
01JUL2014   9:07

这可能与日期/时间的存储方式有关吗?例如,9:07 可能是 9:07:34,而这与另一个可能是 9:07:11 的匹配不匹配?

【问题讨论】:

  • 似乎是什么问题?您是否得到了意想不到的结果、错误消息或其他内容?也许有关问题的一些细节(可能带有示例数据和/或任何错误消息)将有助于集中任何响应。
  • 嗨,阿米尔。我刚刚根据您的建议编辑了问题。谢谢。
  • 要测试您关于秒的理论,请尝试在日志中显示一些时间值,例如put time_num time.; 那么应该会显示存储的任何秒数。
  • 或者只使用 best12。格式将显示存储的确切数字,即自 1960 年 1 月 1 日以来的秒数。
  • 我将时间四舍五入到 60,这似乎解决了问题。谢谢大家。

标签: date time merge format sas


【解决方案1】:

这里的困难在于,时间不是仅仅被读取为小时和分钟,而是被读取为秒 - 即使这没有以格式显示。

为了解决这个问题,我只是使用 round 函数将 sas 时间四舍五入到最接近的 60(即最接近的分钟);

time_round=round(put(time_num, best12.), 60);

然后我在 time_round 上合并(这是从午夜开始的秒数,例如 5940)

这样做解决了上述合并问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2013-11-29
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多