楼主: lizhewenbei
7643 18

请教大家,如果变量名不一样,如何使用proc sql进行纵向合并? [推广有奖]

  • 15关注
  • 5粉丝

已卖:668份资源

副教授

38%

还不是VIP/贵宾

-

威望
0
论坛币
304 个
通用积分
11.3270
学术水平
4 点
热心指数
13 点
信用等级
5 点
经验
9728 点
帖子
614
精华
0
在线时间
502 小时
注册时间
2008-2-6
最后登录
2025-11-27

楼主
lizhewenbei 学生认证  发表于 2014-11-30 09:21:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想使用proc sql中的纵向合并(union)把数据集1和数据集2合并在一起,但是由于这两个数据集的变量名称差别较大,不知道该怎样做。
我目前使用的笨办法是,利用data步的rename,将两个数据集的变量名称改成一样的,再用set合并。
数据集1(附件中的b1):
1.jpg
数据集2(附件中的b2):
2.jpg

合并后的数据集:希望达到的效果
3.jpg



二维码

扫码加我 拉你入群

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

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

关键词:proc sql 如何使用 ROC sql rename 如何

b2.xlsx
下载链接: https://bbs.pinggu.org/a-1684493.html

8.56 KB

b1.xlsx

8.57 KB

沙发
fengruiling 在职认证  发表于 2014-11-30 09:52:29
proc sql的目的是在两个数据集找相同的关键变量,然后合并成一条case吧?
从你贴的数据来看你这两个数据集不是想横着合并,是想纵向合并吧,这样就是应该用set啊。
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 1 + 1 + 1 + 1 精彩帖子

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

藤椅
teqel 发表于 2014-11-30 09:58:09
sql纵向合并不需要相同的变量名。

板凳
lizhewenbei 学生认证  发表于 2014-11-30 09:58:13
fengruiling 发表于 2014-11-30 09:52
proc sql的目的是在两个数据集找相同的关键变量,然后合并成一条case吧?
从你贴的数据来看你这两个数据集 ...
感谢!你的意思是,这种情况根本不应该用proc sql,对吧?

报纸
lizhewenbei 学生认证  发表于 2014-11-30 09:58:18
fengruiling 发表于 2014-11-30 09:52
proc sql的目的是在两个数据集找相同的关键变量,然后合并成一条case吧?
从你贴的数据来看你这两个数据集 ...
感谢!你的意思是,这种情况根本不应该用proc sql,对吧?

地板
fengruiling 在职认证  发表于 2014-11-30 10:00:56
lizhewenbei 发表于 2014-11-30 09:58
感谢!你的意思是,这种情况根本不应该用proc sql,对吧?
我觉得是。。不过看楼上的意思是proc sql可以直接纵向合并。。这个我不懂,你问问他吧~

7
lizhewenbei 学生认证  发表于 2014-11-30 10:04:02
teqel 发表于 2014-11-30 09:58
sql纵向合并不需要相同的变量名。
感谢teqel,但是我编写了代码,却没法将其很好的合并。
proc sql;
create table a as select
a.id_1, a.class_a,  a.name_one,  a.zhiwu_first,
b.id_2, b.class_b, b.name_two,  b.zhiwu_second
from b1 as a
union
b2 as b
on a.id_1=b.id_2 and a.class_a= b.class_b and  a.name_one=b.name_two and a.zhiwu_first=b.zhiwu_second;
quit;
然而,LOG却继续报错。

8
teqel 发表于 2014-11-30 10:06:18
语法不过关啊:

proc sql;
create table a as
select * from b1
union
select * from b2;
quit;

9
mingfeng07 学生认证  发表于 2014-11-30 12:21:23
  1. proc sql;
  2. create table a3 as selct * from a1 union select * from a2;
  3. quit;
复制代码

10
bobguy 发表于 2014-12-1 02:35:03
You can use the 'outer union' in SAS sql. please see the example below for more details.

data t1(rename=(id=id_a class=class_a name=name_a))
     t2(rename=(id=id_b class=class_b name=name_b));
   do id=1 to 12;
      class=mod(id,3);
          name=byte(id+64);
          if class =2 then output t1;
      else output t2;
   end;
run;

proc print data=t1;
run;

proc print data=t2;
run;

proc sql;
        create table t3 as
           select * from t1(rename=(id_a=id class_a=class name_a=name))
           outer union corr
           select * from t2(rename=(id_b=id class_b=class name_b=name));
     quit;

         proc print;run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 1 + 1 + 1 + 1 精彩帖子

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

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

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