楼主: wdxmahone
12818 12

sas中两个表的合并 [推广有奖]

  • 0关注
  • 1粉丝

已卖:348份资源

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
12568 个
通用积分
0
学术水平
2 点
热心指数
3 点
信用等级
2 点
经验
3518 点
帖子
121
精华
0
在线时间
155 小时
注册时间
2010-1-11
最后登录
2022-9-4

楼主
wdxmahone 发表于 2010-1-27 09:46:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我现在有两个数据库,
data a;
input stcd $@@;
cards;
00 01
;
run;

data b;
input date $ 1-10 price;
cards;
2009-01-01 12.3
2009-01-02 12.1
;
run;

现在想得到数据c;
data c;
stcd       date          price
00   2009-01-01     12.3
00   2009-01-02     12.1
01   2009-01-01     12.3
01   2009-01-02     12.1

就是讲这两个表完全匹配,但是merge做不到,希望大侠帮忙,谢谢哈!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Price Input cards Merge Data SAS

回帖推荐

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

data d; set b; stcd=00; run; data e; set b; stcd=01; run; data c; set d e; proc print; run;

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

楼主要Cartesian Product? 如果是的话,试试 记录多可能不是很高效,期待更好的算法......

本帖被以下文库推荐

沙发
soporaeternus2 发表于 2010-1-27 09:56:24
楼主要Cartesian Product?
如果是的话,试试

  1. proc sql;
  2. create table ab as
  3.    select
  4.              a.*
  5.              ,b.*
  6.    from        a a
  7.    inner join    b b
  8.    on         1=1
  9. ;
  10. quit;
复制代码

记录多可能不是很高效,期待更好的算法......
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

藤椅
wdxmahone 发表于 2010-1-27 10:16:53
对,就是要您的结果,我的数据量确实很庞大,不过着毕竟是一种方法,还有这一段我不太能看懂,第九行1=1是什么意思啊?

谢谢啊,热泪盈眶。。。

板凳
xiao198821 发表于 2010-1-27 10:20:51
data d;
set b;
stcd=00;
run;

data e;
set b;
stcd=01;
run;

data c;
set d e;
proc print;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

报纸
wdxmahone 发表于 2010-1-27 10:36:38
4# xiao198821

您好!我这个数据比较大,这只是举了一个简单的例子,这样做应该是不太现实的,我用的股票代码,不知道怎么样编程做到这一点啊。。。

谢谢哈。。

地板
soporaeternus2 发表于 2010-1-27 11:06:49

  1. proc sql;
  2. create table ctl as
  3.   select
  4.         stcd
  5.         ,count(*) as Cnt
  6.   from     a
  7.   group by    stcd
  8. ;
  9. quit;
  10. proc sql;
  11. select stcd into:var separated by '|' from ctl;
  12. select cnt into:cnt separated by '|' from ctl;
  13. quit;
  14. %let n=%eval(%sysfunc(countc(&var,|))+1);
  15. %put &var &cnt &n;
  16. %macro PGM;
  17. data c;
  18. retain stcd date price;
  19. set b;
  20. %do j=1 %to &n %by 1;
  21.   %let var_crt=%scan(&var,&j,|);
  22.   %let cnt_crt=%scan(&cnt,&j,|);
  23.   %put &var_crt &cnt_crt;
  24.   stcd="&var_crt";
  25.   %do k=1 %to &cnt_crt %by 1;
  26.    output;
  27.   %end;
  28. %end;
  29. run;
  30. %mend PGM;
  31. %PGM;
复制代码

这个可能快一点,没试验过。
上面那个"1=1"只是一个恒等条件
希望能有用,哈哈

7
zcxdxq 发表于 2010-1-27 11:23:00
proc sql;
create table c as
        (select * from a,b);
run;

8
zcxdxq 发表于 2010-1-27 11:53:13
就是做个笛卡尔积,不知道我有没有理解错误

9
sun5008 发表于 2010-1-27 12:40:08
用SQL的insert into语句

10
wdxmahone 发表于 2010-1-27 13:00:25
8# zcxdxq

您理解是正确的,是做笛卡尔积,您的做法通俗易懂,很好,谢谢哈。还是sql语言没有学好。。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 01:06