楼主: mzhua1989
2555 9

merge语句的疑问 [推广有奖]

  • 1关注
  • 2粉丝

学霸

已卖:102份资源

大专生

55%

还不是VIP/贵宾

-

威望
0
论坛币
233 个
通用积分
0.1230
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
246 点
帖子
44
精华
0
在线时间
14 小时
注册时间
2015-11-4
最后登录
2016-4-29

楼主
mzhua1989 在职认证  发表于 2015-11-18 09:43:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data person;
     input name $ sex $;
         cards;
MARY F
ANN  F
TOM  M
         ;
data place;
     input name $ city $ region;
     cards;
MARY MIAMI 2
ANN TAMPA 6
JOSE ERIE 5
MARY TAMPA 7
;
/*proc sort data=person;
by name;
proc sort data=place;  
by name;*/
data  result;
      merge person place;
      *by name;
proc  print;
      title'DATA SET RESULT';
run;


上述程序,运行出来的结果是:
obs  name    sex  city    region
1      MARY    F    MIAMI    2
2      ANN      F    TAMPA   6
3      JOSE    M    ERIE      5
4      MARY          TAMPA   7
merge语句是合并数据集,但是上面的运行结果中,并没有把person数据集中的TOM观测合并进来,这是为什么呢?
盼各路大侠前来解答~~

二维码

扫码加我 拉你入群

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

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

关键词:Merge Person Region Result place person result title 程序

好好学习,天天向上

沙发
prince315 在职认证  发表于 2015-11-18 10:34:38
你把by语句comment掉了,那他就是按obs,也就是按行merge。结果就是,TOM那条就是第三条,name的值被place表的name字段JOSE覆盖。
解决方法,目测是应该用By statement,按名字进行匹配;或者你只要把后面place的name重命名,就可以理解了。

藤椅
mzhua1989 在职认证  发表于 2015-11-18 12:34:11
prince315 发表于 2015-11-18 10:34
你把by语句comment掉了,那他就是按obs,也就是按行merge。结果就是,TOM那条就是第三条,name的值被place表 ...
你的意思是说,我上面在by前面放了*的意思么?如果把*by name换成by name/statement,出来的结果是
obs  name      city       region
1      MARY     MIAMI     2
2      ANN      TAMPA    6
3      JOSE      ERIE       5
4      MARY    TAMPA    7
即是数据集 place的结果……
如果把place的name变量重命名,数据集中的有些内容会重复哦。

板凳
prince315 在职认证  发表于 2015-11-18 14:29:05
mzhua1989 发表于 2015-11-18 12:34
你的意思是说,我上面在by前面放了*的意思么?如果把*by name换成by name/statement,出来的结果是
obs  ...
额,不需要加后面的那个"/statement",然后加了“*”其实就是comment掉,不起作用。
你这边,只需要把星号去掉就可以了
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
mzhua1989 + 1 + 1 + 1 精彩帖子

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

报纸
mzhua1989 在职认证  发表于 2015-11-18 15:06:32
prince315 发表于 2015-11-18 14:29
额,不需要加后面的那个"/statement",然后加了“*”其实就是comment掉,不起作用。
你这边,只需要把星 ...
嗯,我的意思是用by name 或者by statement,我都试过,但出来的结果都是我上面写的那个,即数据集 place的结果,好奇怪??感觉跟merge没啥关系了

地板
junzjg 发表于 2015-11-18 16:53:27
  1. data person;
  2.       input name$ sex$@@;
  3.           cards;
  4. MARY F
  5. ANN  F
  6. TOM  M
  7.           ;
  8. data place;
  9.       input name$ city$ region@@;
  10.       cards;
  11. MARY MIAMI 2
  12. ANN TAMPA 6
  13. JOSE ERIE 5
  14. MARY TAMPA 7
  15. ;
  16. run;
  17. proc sort data=person;
  18. by name;
  19. run;
  20. proc sort data=place;
  21. by name;
  22. run;
  23. data test;
  24. merge place(in=a) person(in=b);
  25. by name;
  26. if a or b then output test;
  27. run;
复制代码

7
army87 发表于 2015-11-18 17:14:04
把merge改成set试试

8
mzhua1989 在职认证  发表于 2015-11-18 17:36:53
junzjg 发表于 2015-11-18 16:53
按照你的程序,可以合并了,谢谢~~~

9
_appilepie_ 发表于 2015-11-19 08:28:57
junzjg 发表于 2015-11-18 16:53
请问你的这段程序使用什么方法发的,我只会复制黏贴。

10
feng_2long 发表于 2015-11-19 09:51:20
mzhua1989 发表于 2015-11-18 17:36
按照你的程序,可以合并了,谢谢~~~
按照6楼的那个code,最后的data set也是没有tom的吧?

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

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