SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1048|回复: 3
打印 上一主题 下一主题

SAS9中可以实现非排序merge

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-9-22 16:46:49 | 只看该作者

SAS9中可以实现非排序merge

对于作ETL程序的sasor来说,比较头疼的处理是在merge操作以前一定要对数据集进行排序,数据量小还好说,一旦处理大数据量,排序就成了比较费时的操作。
偶在项目中得到一位香港朋友的帮助,发现在sas9利用hash table对大表与小表的拼接完全可以省去sort,特与广大的sasor共享:
data data1;
        input a $ b $;
cards;
a 1
d 10
e 23
b 2
a 3
a 2
c 5
;

data data2;
        input a $ c $;
cards;
a za
b za
a zb
a zc
;

data tmpdata;
        set data2;
        if c = 'za';
run;

data out(drop=rc);
  length a c $ 8;
   if _n_=1 then do;
     declare hash h(dataset: "data2",hashexp:6);
         h.defineKey('a');
         h.defineData('c');
     h.defineDone();
         call missing(a, c);
   end;
   set data1;
   rc=h.find();
   if (rc = 0) then output;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-2-12 20:39:20 | 只看该作者

Re: SAS9中可以实现非排序merge

学习了,刚接触Hash表,拜读你的代码。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-2-13 02:33:08 | 只看该作者

Re: SAS9中可以实现非排序merge

Of course, you can use hash table for merging without sorting but it's not good idea for large data set.
Because you have to load all data into memory in order to use hash table, so if the data set is exttremely large, it's not applicable.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-2-24 23:23:25 | 只看该作者

Re: SAS9中可以实现非排序merge

SQL不是也能实现merge without sort么?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-6 11:35 , Processed in 0.071681 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表