楼主: lizhewenbei
2562 6

请教大家,如何做到这种识别和匹配? [推广有奖]

  • 15关注
  • 5粉丝

副教授

36%

还不是VIP/贵宾

-

威望
0
论坛币
309 个
通用积分
11.4770
学术水平
4 点
热心指数
13 点
信用等级
5 点
经验
9699 点
帖子
609
精华
0
在线时间
496 小时
注册时间
2008-2-6
最后登录
2024-1-9

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教大家,如何做到这种识别和匹配?
1、原始数据
1.png

2、字典
3.png

3、预期效果
2.png
二维码

扫码加我 拉你入群

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

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

关键词:原始数据 如何

3.png (10.39 KB)

3.png

1.png (3.96 KB)

1.png

2.png (5.71 KB)

2.png

test.xls

26.5 KB

沙发
冯枫Fery 在职认证  发表于 2016-4-29 09:08:31 |只看作者 |坛友微信交流群
  SAS新手,表示没有什么思路可以直接编程实现,坐等大神解答;

  从楼主提供的数据来看,都是非结构化的数据,想要直接进行匹配感觉有难度,一点解决思路是先对数据进行预处理,转换成结构化数据,比如

  table1
  name    place
  A公司 海淀 
  B公司 和平
  C公司 玄武
  ...

 table2
  province    city    place
  北京       北京 东城
  北京       北京 西城
  ...
  天津       天津 和平
  ...


之后使用SAS merge语句等进行匹配合并就是了,如果数据量小的话,感觉可行,如果数据量大的话,就不好说了,坐等大神

  
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 3 + 3 + 3 精彩帖子

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

使用道具

藤椅
lizhewenbei 学生认证  发表于 2016-4-30 08:34:17 |只看作者 |坛友微信交流群
冯枫Fery 发表于 2016-4-29 09:08
  SAS新手,表示没有什么思路可以直接编程实现,坐等大神解答;

  从楼主提供的数据来看,都是非结构 ...
数据量比较大,可能只能采用自动提取关键词,然后再识别,才能做到。

使用道具

板凳
yongyitian 发表于 2016-5-2 05:22:14 |只看作者 |坛友微信交流群
可以试试如下思路。
1. 将字典的表转成 long_table, 即每一个县区为一行
2. 将这个 long_table 定义为数据步的 hash-table
3. 对hash table 做循环 (iterate), 用find()函数查找匹配的县区名
4. 用 output 输出找到的县区名
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 3 + 3 + 3 + 3 精彩帖子

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

使用道具

报纸
lizhewenbei 学生认证  发表于 2016-5-2 10:06:06 |只看作者 |坛友微信交流群
yongyitian 发表于 2016-5-2 05:22
可以试试如下思路。
1. 将字典的表转成 long_table, 即每一个县区为一行
2. 将这个 long_table 定义为数 ...
非常感谢您的帮助。

使用道具

地板
teqel 发表于 2016-5-2 10:46:09 |只看作者 |坛友微信交流群
yongyitian 发表于 2016-5-2 05:22
可以试试如下思路。
1. 将字典的表转成 long_table, 即每一个县区为一行
2. 将这个 long_table 定义为数 ...
更倾向于join

最后一步需要仔细检查duplication,手动选择

使用道具

7
yongyitian 发表于 2016-5-4 07:58:33 |只看作者 |坛友微信交流群
teqel 发表于 2016-5-2 10:46
更倾向于join

最后一步需要仔细检查duplication,手动选择
不同省市下的相同地名需要在后处理时清理.
  1. data company;
  2. input name $  place $30.;
  3. datalines;
  4. CompanyA   HaiDianQuZhongGuanCun
  5. CompanyB   BeiFangHePingDongDaJie
  6. CompanyC   TianJinXuanWuQuJieFangLu
  7. CompanyD   JiangSuShengYeYanErZu
  8. CompanyE   FengXianBaiHuoDaLou
  9. CompanyF   TianTianYiXingZhuangDaSha
  10. ; run;

  11. data dic;
  12. input Provience $   DiShi $  XianQU & $200. ;
  13. datalines;
  14. BeiJing   BeiJing   DongCheng|XiCheng|ChongWen|HaiDian
  15. TianJin   TianJin   HePing|HeDong|HeXi|NanKai|HeBei|NHongQiao|TangGu
  16. JiangSu   NanJing   XuanWu|BaiXia|QingHuai|JianAn|GuLou|XiaGuan
  17. JaingSu   WuXi      TaiAn|NanChang|BeiTang|BinHu|XiShang|JiangYin|YiXing
  18. JiangSu   XuZhou    YunLong|JiuLi|JiaWang|FengXian|PeiXian|TongShan
  19. JiangSu   ChangZhou ZhongLou|TianNing|QiYeNian|XinBei|WuJin
  20. JiangSu   SuZhou    JinLan|CangLang|PingJiang|HuQiu
  21. ; run;

  22. data dic_long;
  23.    set dic;
  24.    length a1 $20;
  25.    i=0;
  26.    do until(a1 = " ");
  27.    i+1;
  28.    a1 = scan(XianQU, i, "|");
  29.    if not missing(a1) then output;
  30.    end;
  31.    drop XianQU i;
  32. run;

  33. data want;
  34. if _n_ = 1 then do;
  35. length provience $8 dishi $8 a1 $20;
  36.    declare hash h (dataset: "dic_long");
  37.    declare hiter h_iter ("h");
  38.       h.defineKey('a1', 'Provience', 'DiShi');
  39.       h.defineData('Provience', 'DiShi', 'a1');
  40.       h.defineDone();
  41.    call missing(Provience, DiShi, a1);
  42. end;
  43.   set company;            
  44.   rc = h_iter.first();
  45.   do while (rc=0);
  46.    if find(place, compress(a1) ) then output;
  47.   rc = h_iter.next();
  48.   end;
  49.   drop rc;
  50. run;
复制代码

使用道具

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

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

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

GMT+8, 2024-4-27 18:42