楼主: visiting
1546 5

[问答] 求助:关于数据合并 [推广有奖]

  • 0关注
  • 0粉丝

博士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
371 个
通用积分
3.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
13731 点
帖子
116
精华
0
在线时间
371 小时
注册时间
2011-4-16
最后登录
2021-3-13

楼主
visiting 发表于 2013-2-8 10:54:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有下面2个数据集,实际observation很大,这里只列了部分。请以第一个数据集的location或第2个数据集的destination为“轴”,将a,b两数据集合并(merge), 可是这两变量名字不同(这是小事,改名即可),而且直观上没有“相等”的关系,但是仔细看一下发现,b数据变量destination的值是a数据变量location值的一部分,本题的意图是想以变量location或destination做by variable完成合并(merge), 请高手赐教,谢谢!

data a;
input location $1-22 code group $ cost;
datalines;
The city of history    2 a 30
International airport  4 b 60
University of New York 6 c 80
College of Medicine    5 d 26
;
run;

data b;
input destination :$10. time temp;
datalines;
city 2 25
university 1.5 30
airport 1 28
college 2 30
;
run;



二维码

扫码加我 拉你入群

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

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

关键词:数据合并 destination Internation observation University history 而且

沙发
yongyitian 发表于 2013-2-8 12:42:08
proc sql;
  select compress(quote(upcase(destination))) into : location separted by ' '
     from b;
quit;

data a1;
    set a;
   Nword=countw(location);
   do i=1 to nword;
      var= scan(upcase(location), i, ' ');
       if var in (&location) then output;
   end;
  drop location nword i;
run;

proc sort data=a1(rename=(var=location));
    by location;
run;

data b1;
     set b(rename=(destination=location));
     location=upcase(location);
run;

proc sort data=b1;
    by location;
run;

data a_b;
    merge b1 a1;
    by location;
run;
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
webgu + 60 + 10 + 1 + 1 + 1 热心帮助其他会员

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

藤椅
visiting 发表于 2013-2-8 17:27:34
yongyitian 发表于 2013-2-8 12:42
proc sql;
  select compress(quote(upcase(destination))) into : location separted by ' '
     from  ...
很厉害!!!非常感谢!太牛了!

板凳
zhangzachary 发表于 2013-2-8 21:00:58
  1. data a;
  2. input location $1-22 code group $ cost;
  3. datalines;
  4. The city of history    2 a 30
  5. International airport  4 b 60
  6. University of New York 6 c 80
  7. College of Medicine    5 d 26
  8. ;
  9. run;

  10. data b;
  11. input destination :$10. time temp;
  12. datalines;
  13. city 2 25
  14. university 1.5 30
  15. airport 1 28
  16. college 2 30
  17. ;
  18. run;

  19. data _null_;
  20.   set b;
  21.   call execute('data a; set a; if find(location,"'||strip(destination)||'","i") then do; time='||time||'; temp='||temp||'; end; run;');
  22. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
yongyitian + 1 + 1 + 1 精彩帖子

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

寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

报纸
visiting 发表于 2013-2-9 14:35:38
zhangzachary 发表于 2013-2-8 21:00
谢谢!!!

地板
visiting 发表于 2013-2-9 14:53:22
yongyitian 发表于 2013-2-8 12:42
proc sql;
  select compress(quote(upcase(destination))) into : location separted by ' '
     from  ...
请问如果数据b的destination作一些变动,还能有办法进行合并吗?这个数据其实比我上次贴的更不规范,destination的记录不规范,或词顺变换,或个别词用了其他同义词,但是人工能辨认location和destination的对应关系。下面的数据已经改动了,麻烦高手们看看能不能进行合并处理,谢谢!
data a;
input location $1-22 code group $ cost;
datalines;
The city of history    2 a 30
International airport  4 b 60
University of New York 6 c 80
College of Medicine    5 d 26
;
run;

data b;
input destination $1-21 time temp;
datalines;
history city              2   25
the university          1.5 30
international airport 1   28
medical school         2   30
;
run;

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

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