楼主: 新人2012
42160 22

[学习分享] 有人问我,SAS中合并数据集有几种方法 [推广有奖]

  • 0关注
  • 16粉丝

硕士生

41%

还不是VIP/贵宾

-

威望
0
论坛币
660 个
通用积分
0.0085
学术水平
39 点
热心指数
31 点
信用等级
25 点
经验
2037 点
帖子
131
精华
1
在线时间
51 小时
注册时间
2012-12-9
最后登录
2016-1-2

楼主
新人2012 发表于 2012-12-30 18:08:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我回答,至少四种
1.merge;
2.set;
3.SQL;
4.hash.
我比较懒,嫌烦,不愿再接着解释。现在想想,应该还有两种:
proc iml;
proc datasets.

抛个砖,大家来讲讲每一种的代码怎么写,然后要注意什么,比如合并数据集,还讲究主数据集,哪个在前,哪个在后;以及左连,右连,内连 等等。
辛苦大家了,我叫他到论坛来看就行了。

二维码

扫码加我 拉你入群

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

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

关键词:合并数据 数据集 datasets dataset DataS

回帖推荐

龙潭丰乐 发表于4楼  查看完整内容

看到楼主总结的甚好,我来回复个 1 、set a b 纵向合并a、b数据集,先生成pdv,有些变量在另一个数据集里面没有,合并的时候对应的变量为缺失值。 2、双set语句(set a;set b) 先生成pdv,对于a、b数据集里面都有的变量则b数据值代替a里面的数据值。对于没有的变量则保存下来了。而且观测值个数取决于最小的那个。 例: data a; input x y; cards; 1 2 2 3 ; run; data b; input x ; cards; 2 3 ; ru ...

本帖被以下文库推荐

沙发
新人2012 发表于 2012-12-30 18:31:54
参与讨论的,我都给你们加点。
然后我的所有论坛币全分给你们,不过就21个,每楼5个,先来先得。

藤椅
冰雨狼 发表于 2012-12-31 11:27:16
还有一种是 PROC append ,不过这个是用来追加数据集的(也就是竖向的合并)。
示例:现有数据集A(包含变量 X1,X2,X3)和数据集B(包含变量 X1,X2,X3 ) ,将B追加到A表。
  1. proc append base=a data=b force;
  2. quit;
复制代码
注意事项:所需追加的数据集中变量的名称、数据类型、长度(字符型可能会被截断)要保持一致。
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
灯小登 + 2 + 2 + 2 精彩帖子
新人2012 + 1 + 1 + 1 嗯,不过使用append要小心,尤其置之于循环.

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

板凳
龙潭丰乐 学生认证  发表于 2012-12-31 11:32:26
看到楼主总结的甚好,我来回复个
1 、set a b
     纵向合并a、b数据集,先生成pdv,有些变量在另一个数据集里面没有,合并的时候对应的变量为缺失值。
2、双set语句(set a;set b)
先生成pdv,对于a、b数据集里面都有的变量则b数据值代替a里面的数据值。对于没有的变量则保存下来了。而且观测值个数取决于最小的那个。
例:
data a;
input x y;
cards;
1 2
2 3
;
run;
data b;
input x ;
cards;
2
3
;
run;
data c;
set a ;
set b ;
by x;
run;
proc print data=c;
run;

3、merge语句(横向合并)
  注意:merge合并的数据必须根据某一变量先排序了,之后才能根据某一变量合并。
Merge语句还有一个重要的关键字可以使用(in)。用in判断可以实现类似于sql里面左联右连。
4、sql语句
   Sql语句之强大不用多说,此处列举一些注意地方吧!
(1)        merge语句合并与sql/where合并不太一样(由旨多对多的连接)
sql是生成笛卡尔积,之后根据where判断,而merge语句是根据排序后的顺序,merge连接是循序的(根据sas advance书上应该是如此翻译,不太好理解)。请大家指教。
例:为什么不是1-1不是4个,merge到底是怎么弄的?
data a;
input x y;
cards;
1 2
1 3
2 3
;
run;
data b;
input x ;
cards;
1
1
2
3
;
run;
data c;
merge a b;
by x;
run;
proc print data=c;
run;



   
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
abc591623342 + 1 + 1 + 1 精彩帖子
新人2012 + 1 + 1 + 1 辛苦了!谢谢!

总评分: 经验 + 3  论坛币 + 3  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

报纸
冰雨狼 发表于 2012-12-31 15:37:23
龙潭丰乐 发表于 2012-12-31 11:32
看到楼主总结的甚好,我来回复个
1 、set a b
     纵向合并a、b数据集,先生成pdv,有些变量在另一个数据 ...
merge是按照BY的变量位置进行匹配的

地板
新人2012 发表于 2012-12-31 18:18:48
怎么给他人加论坛币啊?

7
龙潭丰乐 学生认证  发表于 2013-1-1 23:00:58
关于多对多的merge  怎么回事?到底指针怎样运行的?

8
wangfengxi 发表于 2013-1-2 18:49:06 来自手机
龙潭丰乐 发表于 2013-1-1 23:00
关于多对多的merge  怎么回事?到底指针怎样运行的?
请参阅programming2

9
wangfengxi 发表于 2013-1-2 18:53:25 来自手机
wangfengxi 发表于 2013-1-2 18:49
请参阅programming2
merge是按址合并,指针按by变量的顺序,不管数据集的先后顺序。个人理解。

10
ttklkl 发表于 2013-1-2 19:44:22
龙潭丰乐 发表于 2013-1-1 23:00
关于多对多的merge  怎么回事?到底指针怎样运行的?
对于多对多merge,最好不要用merge语句,容易出错,而且log里会报repeated,建议用SQL语句。
Stay Hungry. Stay Foolish.

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

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