楼主: peijiamei
5689 10

SAS数据处理问题,表的合并! [推广有奖]

已卖:299份资源

学科带头人

75%

还不是VIP/贵宾

-

威望
3
论坛币
26157 个
通用积分
12.7133
学术水平
217 点
热心指数
343 点
信用等级
210 点
经验
75401 点
帖子
1099
精华
1
在线时间
2016 小时
注册时间
2007-11-15
最后登录
2016-3-21

楼主
peijiamei 发表于 2010-3-28 14:04:25 |AI写论文
1000论坛币
表1
交易所 公司    时间        价格
SH        1      20040102   3
SH        1      20040103   7
SH        2      20040102   3
SH        2      20040103   6
SZ        1      20040102    3
SZ       1       20040103    1
SZ       2       20040102    5
SZ       2       20040103    3


表2
交易所 时间      收益
SH      20040102       5
SH      20040103       6


表3
交易所 时间         收益

SZ      20040102       2
SZ      20040103       3

现在需要将数据合并成一个表格样式如下:


交易所 公司    时间        价格  收益
SH        1      20040102   3          5
SH        1      20040103   7         6
SH        2      20040102   3         5
SH        2      20040103   6          6
SZ        1      20040102    3         2
SZ       1       20040103    1         3
SZ       2       20040102    5         2
SZ       2       20040103    3         3


谢谢大家!

最佳答案

luijb 查看完整内容

如果数据量比较大的话,用我的程序吧。
关键词:sas数据处理 数据处理问题 数据处理 数据合并 交易所 数据处理 SAS 数据分析专题 数据处理 数据分析软件 数据分析报告 面板数据分析 excel数据分析 数据分析方法 项目数据分析

回帖推荐

luijb 发表于2楼  查看完整内容

如果数据量比较大的话,用我的程序吧。

gzjb 发表于4楼  查看完整内容

*** merge method for fun **; proc sort data=tb_1; by bourse time; run; proc sort data=tb_2; by bourse time; run; proc sort data=tb_3; by bourse time; run; data combTable; merge tb_1 tb_2 tb_3; by bourse time; run; proc sort data=combTable; by bourse com time; run;

本帖被以下文库推荐

我的微博:http://t.sina.com.cn/1087192374
欢迎互相加关注!

沙发
luijb 在职认证  发表于 2010-3-28 14:04:26
  1. data tb_1;
  2. input bourse $ com $ time $ price $;
  3. cards;
  4. SH        1      20040102   3
  5. SH        1      20040103   7
  6. SH        2      20040102   3
  7. SH        2      20040103   6
  8. SZ        1      20040102    3
  9. SZ       1       20040103    1
  10. SZ       2       20040102    5
  11. SZ       2       20040103    3
  12. ;
  13. run;
  14. data sh;
  15. input bourse $ time $ prof $;
  16. cards;
  17. SH      20040102       5
  18. SH      20040103       6
  19. ;
  20. run;
  21. data sz;
  22. input bourse $ time $ prof $;
  23. cards;
  24. SZ      20040102       2
  25. SZ      20040103       3
  26. ;
  27. run;

  28. data final;
  29. if 0 then set sh;
  30. if _n_=1 then do;
  31.     declare hash h2;
  32. end;
  33. set tb_1;
  34. h2 =_new_ hash(dataset:bourse,ordered:'ascending');
  35. h2.defineKey ('bourse','time');
  36. h2.definedata(all:'yes');
  37. h2.defineDone ();
  38. rc=h2.find();
  39. run;
  40. proc print data=final;
  41. run;
复制代码
如果数据量比较大的话,用我的程序吧。
已有 2 人评分学术水平 热心指数 收起 理由
peijiamei + 1 该程序运行的非常慢呀!
soporaeternus + 1 + 1 很好的算法,学习了

总评分: 学术水平 + 1  热心指数 + 2   查看全部评分

西格玛临床统计服务工作室http://www.sigma-stat.com/,luijb@163.com

藤椅
yzzhang 发表于 2010-3-28 15:13:17
data tb_1;
input bourse $ com $ time $ price $;
cards;
SH        1      20040102   3
SH        1      20040103   7
SH        2      20040102   3
SH        2      20040103   6
SZ        1      20040102    3
SZ       1       20040103    1
SZ       2       20040102    5
SZ       2       20040103    3
;
run;
data tb_2;
input bourse $ time $ prof $;
cards;
SH      20040102       5
SH      20040103       6
;
run;
data tb_3;
input bourse $ time $ prof $;
cards;
SZ      20040102       2
SZ      20040103       3
;
run;



proc sql;
create table tb_fnl as select
  a.*, coalesce(b.prof,c.prof) as prof
from tb_1 as a
  left join tb_2 as b on a.bourse=b.bourse and a.time=b.time
  left join tb_3 as c on a.bourse=c.bourse and a.time=c.time
order by bourse,com,time;
quit;
已有 1 人评分论坛币 学术水平 收起 理由
peijiamei + 100 + 1 精彩帖子

总评分: 论坛币 + 100  学术水平 + 1   查看全部评分

板凳
gzjb 发表于 2010-3-28 23:22:13
*** merge method for fun  **;
proc sort data=tb_1; by bourse time; run;
proc sort data=tb_2; by bourse time; run;
proc sort data=tb_3; by bourse time; run;

data combTable;
  merge tb_1 tb_2 tb_3;
  by bourse time;
run;

proc sort data=combTable;
   by bourse com time;
run;
已有 1 人评分论坛币 学术水平 收起 理由
peijiamei + 100 + 1 精彩帖子

总评分: 论坛币 + 100  学术水平 + 1   查看全部评分

报纸
willypan 发表于 2010-3-29 09:34:58
先合并表2表3,再用sql合并表1。

地板
luijb 在职认证  发表于 2010-3-29 09:55:15
谢谢鼓励啊,我就一个问题,你的那么多论坛币是哪里弄来的啊
西格玛临床统计服务工作室http://www.sigma-stat.com/,luijb@163.com

7
soporaeternus 发表于 2010-3-29 10:03:55
这个基于hash算法的本质就是将筛选条件表按一个条件的某些字段拆分(本例是巧合?),学习了
有点像某种join的算法......

8
cz851218 发表于 2010-3-30 16:10:46
data a;
input jiaoyi $2. company time $9. price;
cards;
sh 1 20040102 3
sh 1 20040103 7
sh 2 20040102 3
sh 2 20040103 6
sz 1 20040102 3
sz 1 20040103 1
sz 2 20040102 5
sz 2 20040103 3
;
run;
data b;
input jiaoyi $2. time $9. payoff;
cards;
sh 20040102 5
sh 20040103 6
;
run;
data c;
input jiaoyi $2. time $9. payoff;
cards;
sz 20040102 2
sz 20040103 3
;
run;
data f;
merge b c;
by jiaoyi;
run;
proc sql;
create table hebing as
select * from a join f on a.jiaoyi=f.jiaoyi and a.time=f.time;
run;

9
cz851218 发表于 2010-3-30 16:13:17
楼主怎么来的这么多论坛币啊!

10
ryping2009 发表于 2010-4-6 23:07:46
data;
%let x=100;
%let y=%eval(&x+200);
%let z=&x+200;
%put y=&y z=&z;
run;
提交上述程序后,Log窗口显示的结果为:
y=300   z=100+200
例中,宏变量Y的值是一数值,而宏变量Z的值是字符串”100+200”。
例14.10 定义宏plot。
%macro plot;
proc gplot data=ResDat.stk000002;
title2 "收盘价时序图";
plot clpr*date=1;
symbol1 v=star i=join r=1 c=red;
%mend plot;
这两例请楼助参考!
已有 1 人评分学术水平 热心指数 收起 理由
peijiamei + 2 + 2 好的意见建议

总评分: 学术水平 + 2  热心指数 + 2   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-18 09:34