楼主: yuyan860718
2938 4

[问答] 两个数据集按照某个变量模糊匹配 [推广有奖]

  • 1关注
  • 0粉丝

本科生

23%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
1.4500
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
202 点
帖子
4
精华
0
在线时间
165 小时
注册时间
2008-1-22
最后登录
2024-3-13

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
一个数据集1中有一个变量 firmname                           
深圳市中兴通讯股份有限公司
上海邮通实业发展总公司

另一个数据集2中有变量
nameabr    stkcd
中兴通讯  000063


如何将数据集1和数据集2 合并在一起变成如下数据集

firmname                                  nameabr    stkcd
深圳市中兴通讯股份有限公司  中兴通讯   000063
上海邮通实业发展总公司


二维码

扫码加我 拉你入群

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

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

关键词:中兴通讯股份有限公司 股份有限公司 000063 中兴通讯 实业发展

已有 1 人评分热心指数 收起 理由
eijuhz + 1 精彩帖子

总评分: 热心指数 + 1   查看全部评分

沙发
whymath 发表于 2019-3-11 22:51:47 |只看作者 |坛友微信交流群
需要分情况讨论:
1. 一者是另一者的子字符串(数学表达为子集);
2. 两者仅有公共的子字符串(数学表达为存在交集);
3. 两者在字符上毫不相干(数学表达为不相交);

则在连接两个数据集时分情况处理:
1. 使用find函数即可,该函数可用于判断A是否为B的子集;
2. 使用compare函数(记不大清,应该是字符比较族函数)即可,该函数可用于判断字符串的编辑距离(求笛卡尔积,然后取编辑距离最小的);
3. 增加中间数据集,使得两个原本不相交的集合分别与中间集相交,然后利用在中间集构造的映射关系完成匹配;

SASUSER

使用道具

藤椅
yanglun 发表于 2019-3-12 15:10:07 |只看作者 |坛友微信交流群
楼上大神回答的好高深,懵懂。 不知道是不是这样,或许我没理会楼主的意思 ?

微信图片_20190312150930.png (45.24 KB)

微信图片_20190312150930.png

使用道具

板凳
yuyan860718 发表于 2019-3-12 18:09:11 |只看作者 |坛友微信交流群
whymath 发表于 2019-3-11 22:51
需要分情况讨论:
1. 一者是另一者的子字符串(数学表达为子集);
2. 两者仅有公共的子字符串(数学表达 ...
我用过find这个函数,在proc sql过程中似乎不可行

使用道具

报纸
luekemia 发表于 2019-3-21 14:29:04 |只看作者 |坛友微信交流群
直接给代码吧:

data a;

format firmname $100.;

input firmname;

cards;

深圳市中兴通讯股份有限公司

上海邮通实业发展总公司

;run;



data b;

format nameabr $50. stkcd $20.;

input nameabr stkcd;

cards;

中兴通讯  000063

;run;


data c;

set b;

format cmd_str $1000.;

cmd_str = "if find(firmname,'"||compress(nameabr)||"') then nameabr='"||compress(nameabr)||"';";

call symput("cmd"||compress(_n_),cmd_str);

run;


proc sql noprint;

select count(*) into :n_cmds from c;

quit;



%macro gencmd;

%do i = 1 %to &n_cmds.;

&&cmd&i..;

%end;

%mend;



data d;set a;

%gencmd;

run;


proc sql;

create table result as

select d.firmname,b.stkcd

from d left join b

on d.nameabr = b.nameabr

;quit;



使用道具

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

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

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

GMT+8, 2024-4-19 17:35