全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
10419 11
2011-02-21
我现在有张想放进hash 里的表,他是个分类表,就是在某一类别中,key才是唯一的。
由于hash表联接时key要唯一,怎样可以不用把此表按照类别拆分成一个一个小表后再连
因为我的表很大,类别比较多,用sql或拆分后不是很慢就是生成很多张表。

比如 表A
kind     id
a          1
a          2
b          1
b          3
c          2
c          3

表B
id     amt
1       50
2       40
2       20
3       30

我想要得到kind(类别)   a   b   c 类下所有id 的总amt额。。想用hash 做  求教高手
十分感谢。。。sql   join  再group by实在太慢了。。
二维码

扫码加我 拉你入群

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

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

全部回复
2011-3-30 22:58:52
首先说一下,哈希表的关键字是可以不唯一的,如下可以实现。详细请看http://www.pinggu.org/bbs/thread-1062169-1-1.html
data data1;
input kind$ id$;
cards;
a          1
a          2
b          1
b          3
c          2
c          3
;
run;
data data2;
input id$ amt;
cards;
1       50
2       40
2       30
3       30
;
run;
data result1;
length kind$ 8 id$ 8;
if _n_=1 then do;
  declare hash h1(dataset:'data1',ordered:'y', multidata: 'y');
  h1.definekey('id');
  h1.definedata('id','kind');
  h1.definedone();
  call missing(id,kind);
end;
do while(not last1);
  set data2 end=last1;
  h1.find();
  output;
  h1.has_next(result:r);
  do while(r ne 0);
   h1.find_next();
   output;
   h1.has_next(result:r);
  end;
end;
run;
data _null_;
length kind$ 8 id$ 8;
if _n_=1 then do;
  declare hash h2(ordered:'y');
  h2.definekey('kind');
  h2.definedata('id','kind','total');
  h2.definedone();
  call missing(id,kind,total);
end;
do while(not done);
  set result1 end=done;  
   if h2.find()=0 then do;
   total+amt;
   h2.replace();
   end;
   else do;
   total=amt;
   h2.add();
   end;
end;
h2.output(dataset:'result2');
run;
二维码

扫码加我 拉你入群

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

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

2011-8-28 15:06:55
275769263 发表于 2011-3-30 22:58
首先说一下,哈希表的关键字是可以不唯一的,如下可以实现。详细请看http://www.pinggu.org/bbs/thread-106 ...
不过这样有个问题  hash表中的数据集就必须排过序了。。那这样的话不如 把data2也排序 进行merge了
二维码

扫码加我 拉你入群

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

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

2011-8-28 18:19:19
复制代码
二维码

扫码加我 拉你入群

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

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

2011-8-28 22:03:58
hopewell 发表于 2011-8-28 18:19
呵呵  hopewell 你好啊。。

means过程对大量数据就是个杯具。。再加上format..

我这个问题其实主要想解决G级数据的处理的...要不然就直接 sql了么。。

用format反而有点绕了。。不过也不失为一种方法  感谢。

望闲来无事支持下小弟的 daaata.com
二维码

扫码加我 拉你入群

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

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

2011-8-28 22:40:32
复制代码
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群