设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1816|回复: 0

SAS中的数据拼接

[复制链接]

26

主题

207

金钱

343

积分

入门用户

发表于 2019-9-12 15:36:47 | 显示全部楼层 |阅读模式

1. 数据拼接分为纵向拼接和横向拼接

(1)纵向拼接,字面意思,将另一张表的数据填充到原始数据的下面。纵向拼接,可以使用 data 步中的 set,也可以使用 proc 步中的 append。
原始数据1:
  1. data Mysas.data1;
  2. input name $ age sex $;
  3. cards;
  4. zhou 25 f
  5. wang 28 m
  6. li 27 f
  7. wu 23 m
  8. ;
  9. run;
复制代码

1.png

原始数据2:
  1. data Mysas.data2;
  2. input name $ age sex $;
  3. cards;
  4. zhao 32 f
  5. sun 31 m
  6. qian 30 f
  7. zhen 37 m
  8. ;
复制代码

2.png

使用 data 步中的 set 拼接:
  1. data Mysas.data1;
  2. input name $ age sex $;
  3. cards;
  4. zhou 25 f
  5. wang 28 m
  6. li 27 f
  7. wu 23 m
  8. ;
  9. run;

  10. data Mysas.data2;
  11. input name $ age sex $;
  12. cards;
  13. zhao 32 f
  14. sun 31 m
  15. qian 30 f
  16. zhen 37 m
  17. ;

  18. data Mysas.result;
  19.     set Mysas.data1 Mysas.data2;
  20. run;

  21. proc print data = Mysas.result;
  22. run;
复制代码


结果为:
3.png

使用 proc 步中的 append 来拼接,虽然效率比 set 高,但是不建议,因为 append 拼接数据,会损坏原始数据:
  1. data Mysas.data1;
  2. input name $ age sex $;
  3. cards;
  4. zhou 25 f
  5. wang 28 m
  6. li 27 f
  7. wu 23 m
  8. ;
  9. run;

  10. data Mysas.data2;
  11. input name $ age sex $;
  12. cards;
  13. zhao 32 f
  14. sun 31 m
  15. qian 30 f
  16. zhen 37 m
  17. ;

  18. /* 这里的 force 是强制拼接 */
  19. proc append base=Mysas.data1 data=Mysas.data2 force;
  20. run;

  21. proc print data = Mysas.result;
  22. run;
复制代码



2)横向拼接,只是数据按照变量来横向排列,对于重复的变量名,SAS 会自动覆盖。横向拼接又分为:by 变量、无 by 变量。
原始数据为:
4.png

无by变量的代码:
  1. data data3;
  2. input visit $ date $;
  3. cards;
  4. v1 20190825
  5. v2 20180923
  6. v3 20171023
  7. v4 20181026
  8. ;
  9. run;

  10. proc print data = data3;
  11. run;

  12. data data4;
  13. input visit $ condition $;
  14. cards;
  15. v1 good
  16. v2 bad
  17. v3 middle
  18. v4 well
  19. ;
  20. run;

  21. proc print data = data4;
  22. run;

  23. data result;
  24. merge data3 data4;
  25. run;

  26. proc print data = result;
  27. run;
复制代码

结果为
5.png

有by变量的代码:
  1. data data3;
  2. input visit $ date $;
  3. cards;
  4. v1 20190825
  5. v2 20180923
  6. v3 20171023
  7. v4 20181026
  8. ;
  9. run;

  10. proc print data = data3;
  11. run;

  12. data data4;
  13. input visit $ condition $;
  14. cards;
  15. v1 good
  16. v2 bad
  17. v3 middle
  18. v4 well
  19. ;
  20. run;

  21. proc print data = data4;
  22. run;

  23. data result;
  24. merge data3 data4;
  25. by visit;
  26. run;

  27. proc print data = result;
  28. run;
复制代码

结果为:
6.png

虽然结果是一样的,但是对于有无 by 还是有很大的区别的
无 by 而言,merge 是按照一行一行来的,就是左边一行,右边一行,直接 merge
有 by 而言,merge 是按照 by 的变量来 merge 的,而不是按照一行一行来的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

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