楼主: 920240553
10905 8

[问答] 求助:SAS sql横向合并两个数据集? [推广有奖]

  • 0关注
  • 1粉丝

SAS问鼎

博士生

86%

还不是VIP/贵宾

-

威望
0
论坛币
1764 个
通用积分
4.2602
学术水平
9 点
热心指数
12 点
信用等级
3 点
经验
4803 点
帖子
129
精华
0
在线时间
418 小时
注册时间
2013-11-30
最后登录
2024-1-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有以下两个数据集:
data a1;
input var1 var2 $;
cards;
1 xxx
2 yyy
2 zzz
2 aaa
;
run;

data a2;
input var1 var3 $;
cards;
1 bbb
1 ccc
1 ddd
1 eee
2 fff
2 ggg
2 ITT
;
run;

请问如何在SAS SQL过程中只用一条SAS SQL语句实现a1\a2的横向合并数据集a3:
a3要求如下:
var1var2var3

1

xxxbbb

1

ccc

1

ddd

1

eee

2

yyyfff

2

zzzggg

2

aaaITT

二维码

扫码加我 拉你入群

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

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

关键词:sql 数据集 cards Input sql语句 如何

回帖推荐

bbear 发表于6楼  查看完整内容

办得到, 跟m的方法是一样的. 但也许分开写比较清楚. proc sql; create table xx as select b.var1, a.var2, b.var3 from (select *, monotonic() as ord, (calculated ord-min(calculated ord)) as ord2 from a1 group by var1) as a right join (select *, monotonic() as ord, (calculated ord-min(calculated ord)) as ord2 from a2 group by var1) as b on a.var1=b.var1 & a.ord2 =b.ord2; ---debug proc ...
唯SAS之鼎也!
沙发
mingfeng07 学生认证  发表于 2014-5-16 11:23:11 |只看作者 |坛友微信交流群
  1. data a1;
  2. input var1 var2 $;
  3. cards;
  4. 1 xxx
  5. 2 yyy
  6. 2 zzz
  7. 2 aaa
  8. ;
  9. run;

  10. data a2;
  11. input var1 var3 $;
  12. cards;
  13. 1 bbb
  14. 1 ccc
  15. 1 ddd
  16. 1 eee
  17. 2 fff
  18. 2 ggg
  19. 2 ITT
  20. ;
  21. run;
  22. %macro test;
  23. %do i=1 %to 2;
  24. proc sort data=a&i.;by var1;run;
  25. data a&i.;
  26. set a&i.;
  27. by var1;
  28. if first.var1 then sum=1;
  29. else sum+1;
  30. run;
  31. %end;
  32. %mend;
  33. %test;
  34. proc sql;
  35. create table a3 as select a2.var1,var2,var3 from a1 right join a2 on a1.var1=a2.var1 and a1.sum=a2.sum;
  36. quit;
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

使用道具

藤椅
920240553 发表于 2014-5-16 11:35:11 |只看作者 |坛友微信交流群
mingfeng07 发表于 2014-5-16 11:23
你好,非常感谢!
这个方法是可以实现,但如果直接在SQL语句中直接衍生出变量sum(不要在data步中衍生),可以做到吗?
唯SAS之鼎也!

使用道具

板凳
mingfeng07 学生认证  发表于 2014-5-16 11:56:02 |只看作者 |坛友微信交流群
920240553 发表于 2014-5-16 11:35
你好,非常感谢!
这个方法是可以实现,但如果直接在SQL语句中直接衍生出变量sum(不要在data步中衍生) ...
据我了解应该不可以,想要得到新的满足要求的sum变量,首先需要排序,而这个排序则需要通过sort过程来完成,SQL过程貌似做不到通过排序来利用逻辑运算符来满足要求。当然也有可能是我水平有限,了解还不够,也许能实现也不一定。
欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

使用道具

报纸
920240553 发表于 2014-5-16 13:38:07 |只看作者 |坛友微信交流群
mingfeng07 发表于 2014-5-16 11:56
据我了解应该不可以,想要得到新的满足要求的sum变量,首先需要排序,而这个排序则需要通过sort过程来完成 ...
OK,非常感谢!
如果你什么时候实现了,记得上传上来以供学习。
唯SAS之鼎也!

使用道具

地板
bbear 发表于 2014-5-16 22:44:36 |只看作者 |坛友微信交流群
办得到, 跟m的方法是一样的. 但也许分开写比较清楚.

proc sql;
create table xx as
select b.var1, a.var2, b.var3
from (select *, monotonic() as ord, (calculated ord-min(calculated ord)) as ord2  from a1 group by var1) as a right join (select *, monotonic() as  ord, (calculated ord-min(calculated ord)) as ord2 from a2 group by var1) as b
on  a.var1=b.var1 & a.ord2 =b.ord2;


---debug

proc sql;
create table  zz as
select *, monotonic() as ord, (calculated ord-min(calculated ord)) as ord2  from a1 group by var1;

proc sql;
create table  zz2 as
select *, monotonic() as ord, (calculated ord-min(calculated ord)) as ord2  from a2 group by var1;
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

使用道具

7
920240553 发表于 2014-5-22 16:50:16 |只看作者 |坛友微信交流群
bbear 发表于 2014-5-16 22:44
办得到, 跟m的方法是一样的. 但也许分开写比较清楚.

proc sql;
很好很强大,结构很严谨,赞一个兄弟!
唯SAS之鼎也!

使用道具

8
pingguzh 发表于 2017-12-26 15:58:30 |只看作者 |坛友微信交流群
好方法,虽然看不懂

使用道具

9
superguy333 发表于 2017-12-26 20:27:43 |只看作者 |坛友微信交流群
  1. data a1;
  2. input var1 var2 $;
  3. cards;
  4. 1 xxx
  5. 2 yyy
  6. 2 zzz
  7. 2 aaa
  8. ;
  9. run;

  10. data a2;
  11. input var1 var3 $;
  12. cards;
  13. 1 bbb
  14. 1 ccc
  15. 1 ddd
  16. 1 eee
  17. 2 fff
  18. 2 ggg
  19. 2 ITT
  20. ;
  21. run;

  22. DATA A12;
  23. MERGE A1 A2;
  24. BY VAR1;
  25. RUN;
  26. PROC SORT DATA=A12;
  27. BY VAR1 VAR2;
  28. RUN;

  29. DATA A12_FIN;
  30. SET A12;
  31. IF NOT FIRST.VAR1 AND NOT FIRST.VAR2 THEN VAR2='';
  32. BY VAR1 VAR2;
  33. RUN;
复制代码
这个方法是不是更简单?merge + first语句,简单易懂,轻松搞定!

已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 08:35