楼主: taoyuanjl
1228 5

[问答] SAS数据集合并的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

10%

还不是VIP/贵宾

-

威望
0
论坛币
1282 个
通用积分
3.1000
学术水平
2 点
热心指数
7 点
信用等级
2 点
经验
1117 点
帖子
66
精华
0
在线时间
136 小时
注册时间
2016-2-3
最后登录
2024-3-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如下代码,执行数据集合并
  1. data xyz;
  2. input id$ x y z;
  3. cards;
  4. A 12 3 45
  5. B 11 2 34
  6. C 10 4 76
  7. D 23 7 16
  8. ;
  9. data uvw;
  10. input id$ u v w;
  11. cards;
  12. A 20 5 50
  13. B 12 3 32
  14. C 16 8 99
  15. f 27 11 15
  16. ;

  17. proc sort data=xyz;
  18. by id;
  19. proc sort data=uvw;
  20. by id;
  21. run;

  22. data a;
  23. set xyz;
  24. set uvw;
  25. by id;
  26. proc print noobs;
  27. run;
复制代码
运行结果如下:
  1. id x   y  z   u  v w
  2. A 12 3 45 20 5 50
  3. B 11 2 34 12 3 32
  4. C 10 4 76 16 8 99
  5. f 23 7 16 27 11 15
复制代码
我的理解应该是如下结果:
  1. id x y z u v w
  2. A 12 3 45 20 5 50
  3. B 11 2 34 12 3 32
  4. C 10 4 76 16 8 99
  5. D 23 7 16  .   .   .
  6. f  .   .    .  27 11 15
复制代码
请问我的理解对么?

二维码

扫码加我 拉你入群

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

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

关键词:SAS数据集合并 sas数据集 数据集 cards Input

回帖推荐

foocares 发表于2楼  查看完整内容

兄弟,你用错命令了,按照你所期望的应该调用的是merge而不是交织的set。 把最后数据集a改成下面格式试试: data a; merge xyz uvw; by id; proc print noobs; run;

foocares 发表于4楼  查看完整内容

你的理解有误,用两个连续的set语句在SAS里叫一对一输入(One-to-one reading)。它的特点是按顺序连读多个数据集,并且新数据集观测数以最小源数据集为准。 所以对于你的例子,数据集只会读四行就停,因为这就是最小源数据集的观测数。至于by id排序不必写是因为两个源数据集录入时本来就已经按 字母排序了。 你想要的输出结果只有用合并语句才管用。
沙发
foocares 发表于 2017-4-26 07:16:01 |只看作者 |坛友微信交流群
兄弟,你用错命令了,按照你所期望的应该调用的是merge而不是交织的set。
把最后数据集a改成下面格式试试:
data a;
merge xyz uvw;
by id;
proc print noobs;
run;

使用道具

藤椅
taoyuanjl 发表于 2017-4-26 15:39:11 |只看作者 |坛友微信交流群
这个是两个连续的set语句的问题,我通过查朱世武老师的“SAS编程技术教程”第二版的76页,里面有一个类似的例子(书中的例子没有by id部分),我的理解就是已第二个set语句中观测数为准,并把第一个set数据集中存在但第二个数据集没有的变量添加。但我不明白这条语句的具体应用场景。

使用道具

板凳
foocares 发表于 2017-4-26 20:37:15 |只看作者 |坛友微信交流群
你的理解有误,用两个连续的set语句在SAS里叫一对一输入(One-to-one reading)。它的特点是按顺序连读多个数据集,并且新数据集观测数以最小源数据集为准。
所以对于你的例子,数据集只会读四行就停,因为这就是最小源数据集的观测数。至于by id排序不必写是因为两个源数据集录入时本来就已经按
字母排序了。

你想要的输出结果只有用合并语句才管用。

使用道具

报纸
taoyuanjl 发表于 2017-4-27 21:36:14 |只看作者 |坛友微信交流群
foocares 发表于 2017-4-26 20:37
你的理解有误,用两个连续的set语句在SAS里叫一对一输入(One-to-one reading)。它的特点是按顺序连读多个数 ...
谢谢!

使用道具

地板
ricksun 发表于 2017-5-2 06:53:51 |只看作者 |坛友微信交流群
加深理解,谢谢

使用道具

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

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

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

GMT+8, 2024-4-23 21:58