楼主: 滞点
2534 12

[问答] MERGE语句+时间格式数据如何合并 [推广有奖]

  • 1关注
  • 0粉丝

博士生

92%

还不是VIP/贵宾

-

威望
0
论坛币
1322 个
通用积分
5.8500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
43139 点
帖子
101
精华
0
在线时间
617 小时
注册时间
2015-7-27
最后登录
2024-4-18

10论坛币
代码及数据如下,希望做到两个Excel同时间数据合并,但目前输出结果有些时间是可以合并,但有些却又不可,不知应该如何修改,请指教。

test.png

B.xlsx (22.87 KB) A.xlsx (26.15 KB)

  1. proc import datafile="C:\Users\Administrator\Desktop\A.xlsx"
  2.      out=a
  3.      dbms=excelcs   replace;
  4.                    *RANGE="Sheet1$";
  5.      *getnames=yes;
  6. run;
  7. proc import datafile="C:\Users\Administrator\Desktop\b.xlsx"
  8.      out=b
  9.      dbms=xlsx
  10.      replace;
  11.      getnames=yes;
  12. run;
  13. DATA B;
  14. SET B;
  15. RENAME PM_T=PM_T;
  16. RUN;
  17. DATA AB;
  18. MERGE A B;
  19. BY TIME;
  20. RUN;

  21. data count_ajusted_PM25;
  22. SET AB;
  23. zhishu=1.11*(1-RH/100)+2.22;
  24. PM25=PM_T/EXP(ZHISHU);
  25. PM35=PM_A/EXP(ZHISHU);
  26. RUN;
复制代码


最佳答案

roller 查看完整内容

我说了, 下面几位也说到了。原因就是:在excel里,举个例子, 你看上去是1.23 , 但说不定实际是1.229, 也可能是1.231, 只不过因为你设置的显示格式是保留两位小数, 所以看上去相同而实际不同。时间类型的数据也是如此。所以proc import 一自动导入到sas里自然就有问题了。 你可以将excel里的内容转成cvs文本, 或者实在不行就复制粘贴到sas里,用input语句加个time8.格式。 这样就不会出问题了。
关键词:Merge
沙发
roller 发表于 2017-12-19 00:16:16 |只看作者 |坛友微信交流群
滞点 发表于 2017-12-19 17:04
感谢您的回复,试过您说的方法了,不行啊
我说了, 下面几位也说到了。原因就是:在excel里,举个例子, 你看上去是1.23 , 但说不定实际是1.229, 也可能是1.231, 只不过因为你设置的显示格式是保留两位小数, 所以看上去相同而实际不同。时间类型的数据也是如此。所以proc import 一自动导入到sas里自然就有问题了。  

你可以将excel里的内容转成cvs文本, 或者实在不行就复制粘贴到sas里,用input语句加个time8.格式。 这样就不会出问题了。
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

使用道具

藤椅
lovexialulu 发表于 2017-12-19 10:37:05 |只看作者 |坛友微信交流群
log 什么情况,有note 说 overwrite吗;

DATA B;
SET B;
RENAME PM_T=PM_T_;
RUN;
DATA AB;
MERGE A B(keep=time pm_t_);
BY TIME;
RUN;

使用道具

板凳
滞点 发表于 2017-12-19 13:30:58 |只看作者 |坛友微信交流群
lovexialulu 发表于 2017-12-19 10:37
log 什么情况,有note 说 overwrite吗;

DATA B;
log正常,但是您修正的code运行后还是一样的问题。。
有的时间是可以合并,有的却合并不上。。

使用道具

报纸
roller 发表于 2017-12-19 13:36:07 |只看作者 |坛友微信交流群
我猜测一下原因及可行的解决方案。
问题出在, 用proc import导入excel文件这一步。也许你的原excel文件有些问题, 比如看上去是10:24:55, 但说不定后面还隐藏了小数点呢。 因为时间这一格式实质上也是数字。

解决方案:你将excel文件转成csv文件, 看看有问题的时间是否变化。 再导入后, 自己在sas里查看一下; 再按时间合并 。 应该不会存在原来的问题了。

使用道具

地板
wer7wer8wer9 发表于 2017-12-19 13:37:35 |只看作者 |坛友微信交流群
merge之前应该先要用proc sort把两个文件排一下序

使用道具

7
滞点 发表于 2017-12-19 16:56:28 |只看作者 |坛友微信交流群
wer7wer8wer9 发表于 2017-12-19 13:37
merge之前应该先要用proc sort把两个文件排一下序
试过啦,也不行T-T

使用道具

8
滞点 发表于 2017-12-19 17:04:47 |只看作者 |坛友微信交流群
roller 发表于 2017-12-19 13:36
我猜测一下原因及可行的解决方案。
问题出在, 用proc import导入excel文件这一步。也许你的原excel文件有 ...
感谢您的回复,试过您说的方法了,不行啊

使用道具

9
superguy333 发表于 2017-12-19 19:24:16 |只看作者 |坛友微信交流群
你的原始数据本身就不一样,当然合并不了

使用道具

10
滞点 发表于 2017-12-19 20:09:36 |只看作者 |坛友微信交流群
superguy333 发表于 2017-12-19 19:24
你的原始数据本身就不一样,当然合并不了
我是想做到一个时间对应到两个原始数据的数据,就像你之前回答我另个悬赏问题一样的问题。https://bbs.pinggu.org/thread-6112675-1-1.html

但就出现了如上问题。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 16:37