请选择 进入手机版 | 继续访问电脑版
楼主: complicated
2565 9

[问答] 分类的关键词搜索的处理 [推广有奖]

  • 3关注
  • 18粉丝

副教授

65%

还不是VIP/贵宾

-

威望
0
论坛币
6483 个
通用积分
3860.1146
学术水平
88 点
热心指数
86 点
信用等级
58 点
经验
21958 点
帖子
506
精华
0
在线时间
1423 小时
注册时间
2007-6-16
最后登录
2023-1-8

complicated 在职认证  发表于 2012-12-26 15:53:00 |显示全部楼层 |坛友微信交流群
50论坛币
各位大牛,求助!
知道各位不差钱,象征性悬赏一下最优答案,截止本周末,希望各位帮助:
我的数据数据是这样的:c是类别,后面是职位名称,
cname
财务/审计/税务财务主管
财务/审计/税务.财务储备干部
财务/审计/税务会计助理
财务/审计/税务销售财务
财务/审计/税务科技财务顾问
IT支持及其它售前/售后技术支持工程师
IT支持及其它技术支持工程师(电信)
IT支持及其它IT技术支持工程师 554BF91CA5


对应的,我需要在“财务/审计/税务”类别里的数据里面查找name中查找我感兴趣的关键词,这里有两个,分别是
“财务主管”和“财务顾问”,如果该name中含有这两个关键词,则在kw中标记出来,没有就显示“无”,如下
cnamekw
财务/审计/税务财务主管财务主管
财务/审计/税务.财务储备干部
财务/审计/税务会计助理
财务/审计/税务销售财务
财务/审计/税务会计助理(电脑开票专员)
财务/审计/税务会计助理
财务/审计/税务财务核算岗
财务/审计/税务会计
财务/审计/税务科技财务顾问财务顾问


看到这里还很简单,问题在于,不同的类别里面关注的关键词不同,
比如,在“财务/审计/税务”类里面,我关注的关键词有18个,在“IT支持及其它”类里面,我关注的完全不同的关键词有24个。
然后我一共有37个类别,每一类关注不同数量的不同的关键词。简化的原数据和类别对应表见附件。

最蠢的办法是(我的办法),把原始数据按每一个类别分成37个子文件,在每个子文件里面find各类对应的关键词,然后把所有的结果拼起来。

我能想到方便一点的解决方案是,二维数组,但是不会用,请大大们指点个方向也行,多谢了!

如果征集到了好的方法,我会系统的整理出关键字、问题描述和解决方案供讨论和交流的,请多多支持!

原始数据.xls (22 KB)

分类关键词目录.xls (17 KB)

最佳答案

ziyenano 查看完整内容

proc import out=origin datafile="E:\原始数据.xls" replace; run; proc import out=keyword datafile="E:\分类关键词目录.xls" replace; run; proc sql; create table res as select a.*,b.key_word as kw from origin a left join keyword b on a.c=b.c and kindex(a.name,b.key_word) ne 0; quit;
关键词:关键词搜索 关键词 税务会计 会计助理 财务主管 sql kindex 文本匹配 left
已有 1 人评分经验 论坛币 热心指数 信用等级 收起 理由
数据分析师3K + 20 + 60 + 1 + 1 鼓励积极发帖讨论

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

本帖被以下文库推荐

密码被盗??
ziyenano 发表于 2012-12-26 15:53:01 |显示全部楼层 |坛友微信交流群
proc import out=origin
datafile="E:\原始数据.xls"
replace;
run;
proc import out=keyword
datafile="E:\分类关键词目录.xls"
replace;
run;
proc sql;
create table res as
select a.*,b.key_word as kw from
origin a left join keyword b
on a.c=b.c and kindex(a.name,b.key_word) ne 0;
quit;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 60 + 60 + 1 + 1 + 1 热心帮助其他会员
Imasasor + 60 + 60 + 1 + 1 观点有启发

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

使用道具

  1. proc import datafile='d:原始数据.xls' out=test;
  2. run;
  3. data test;
  4.         set test;
  5.         if c='财务/审计/税务' then kw=prxchange('s/(.*?)(会计助理|财务顾问)?/$2/',-1,name);
  6.                 else if c='IT支持及其它' then kw=prxchange('s/(.*?)(项目总监|支持工程师|项目经理)?/$2/',-1,name);
  7.         if kw='' then kw='无';
  8. run;
复制代码

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 60 + 60 + 1 + 1 + 1 分析的有道理

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

欢迎加入SAS群:144839730-蜗牛

使用道具

complicated 在职认证  发表于 2012-12-26 17:37:24 |显示全部楼层 |坛友微信交流群
老师她摸我 发表于 2012-12-26 17:13
老师她……
感谢回复,学习了!多谢!
然而,拿到我的真实场景里,这样还是要一个一个的输入所有的c,一共37个,以及所有的Kw小类,
我将来可能面临的类别比这个还多,甚至上升一个数量级,
所以还是想看一看有没有更简单的办法,刚刚开始,我还是想贪婪一点
密码被盗??

使用道具

complicated 在职认证  发表于 2012-12-26 17:39:41 |显示全部楼层 |坛友微信交流群
ziyenano 发表于 2012-12-26 16:52
proc import out=origin
datafile="E:\原始数据.xls"
replace;
ziyenano:这个看起来靠谱!多谢!
我明天试一下,如果行,那真的非常感谢了!
密码被盗??

使用道具

complicated 在职认证  发表于 2012-12-26 17:40:12 |显示全部楼层 |坛友微信交流群
ziyenano 发表于 2012-12-26 16:52
proc import out=origin
datafile="E:\原始数据.xls"
replace;
这个看起来靠谱!多谢!
我明天试一下,如果行,那真的非常感谢了!
密码被盗??

使用道具

complicated 在职认证  发表于 2012-12-27 10:55:09 |显示全部楼层 |坛友微信交流群
ziyenano 发表于 2012-12-26 15:53
proc import out=origin
datafile="E:\原始数据.xls"
replace;
非常感谢!你的代码让我领悟到了全新的境界……
再问俩问题,叨扰了!

我找了一下sql的资料,发现这个kindex好像不是SQL语言的函数,是SAS的吗?
我以前从来没想到过还可以在proc sql里面嵌入非sql的函数,是这样的吗?

还有一个问题,这种匹配似乎是区分大小写的,如果想无视大小写,可以通过代码解决?还是在对照表理把大小写当做不同的case列进去呢?谢了
密码被盗??

使用道具

ziyenano 发表于 2012-12-27 11:29:09 |显示全部楼层 |坛友微信交流群
complicated 发表于 2012-12-27 10:55
非常感谢!你的代码让我领悟到了全新的境界……
再问俩问题,叨扰了!
SAS中通常的函数,都可以用在sql当中,没有sql函数这一说法吧,其他数据库也有自己特有的函数;
proc sql;
create table res as
select a.*,b.key_word as kw from
origin a left join keyword b
on a.c=b.c and kindex(lowcase(a.name),lowcase(b.key_word)) ne 0;/*前后都改为小写比较*/
quit;

已有 1 人评分论坛币 信用等级 收起 理由
数据分析师3K + 20 + 2 好的意见建议

总评分: 论坛币 + 20  信用等级 + 2   查看全部评分

使用道具

complicated 在职认证  发表于 2012-12-27 11:46:35 |显示全部楼层 |坛友微信交流群
ziyenano 发表于 2012-12-27 11:29
SAS中通常的函数,都可以用在sql当中,没有sql函数这一说法吧,其他数据库也有自己特有的函数;
proc sq ...
赞!明白了,SQL的逻辑和SAS的函数,我的理解还是太浅了
密码被盗??

使用道具

complicated 在职认证  发表于 2012-12-28 09:56:19 |显示全部楼层 |坛友微信交流群
心得:
一、sql的多表关联查询的应用范围其实可以很广的,用好了from里的条件,很强大;
二、proc sql不仅是sql,还是SAS的一个proc,可以嵌套SAS函数实现更强的功能,一般DBA的sql知识是不够的,要结合起来;
三、SAS的函数太多了……知不知道一个函数的差别可能是0和1的差别,也可能是几百行代码和几行代码的差别,这么多函数怎么学啊
密码被盗??

使用道具

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

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

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

GMT+8, 2024-3-28 19:26