楼主: windlove
2036 6

如何提取只包含特定词组的变量 [推广有奖]

  • 3关注
  • 2粉丝

副教授

37%

还不是VIP/贵宾

-

威望
0
论坛币
1975 个
通用积分
55.0172
学术水平
21 点
热心指数
12 点
信用等级
6 点
经验
972 点
帖子
305
精华
0
在线时间
1270 小时
注册时间
2006-3-15
最后登录
2024-3-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
SAS 的数据如下

Osteoarthritis (OA)

OA (Osteoarthritis)

OA Knee

Osteoarthritis Knee

OA + hands

Osteoarthritis, hands

OA , hip

OA

Knee OA

? OA

希望提取只包括OA/Osteoarthritis, 或者OA/Osteoarthritis还有Knee的数据, 其他的都不要。因为数据非常大, 而且非常混乱没有非常特定的规律, 所以没有办法列出不需要的组合。谢谢。


二维码

扫码加我 拉你入群

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

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

关键词:如何提取 arthritis Hands Hand ART 如何

沙发
lovexialulu 发表于 2017-3-10 15:29:50 |只看作者 |坛友微信交流群
描述的不清楚啊,比如数据是什么样的,根据所列的部分数据想得到什么结果,prxchange 和 prxmatch函数 应该可以做吧

使用道具

藤椅
windlove 发表于 2017-3-10 15:32:23 |只看作者 |坛友微信交流群
上面列出来的就是数据,  
下面就是想生成的结果。
Osteoarthritis (OA)
OA (Osteoarthritis)
OA Knee
Osteoarthritis Knee
OA
Knee OA
? OA

OA/Osteo with knee 可以通过以下提取


where prxmatch("m/osteoar|oa /oi", lowcase(diagnosis)) and prxmatch("/knee/", lowcase(diagnosis)) ;


For OA only, 目前解决方法是:


where ((lowcase(diagnosis)) contains 'oa' and not prxmatch('~B|C|D|E|F|G|H|I|J|K|L|M|N|P|Q|R|S|T|U|V|W|X|Y|Z~i', upcase(diagnosis)));


其他的情况比如OA 还有osteoarthristis 同时出现的情况 或者只有osteoarthritis 出现的情况目前没有想出来解决办法。OA/Osteoarthristic 可以有特殊符号出现比如?,但不能有身体部分, 比如hand, hip, cervical 这些。



使用道具

板凳
lovexialulu 发表于 2017-3-10 16:23:34 |只看作者 |坛友微信交流群

if (prxmatch("/OA/",diagnosis) or prxmatch("/Osteoarthritis/i",diagnosis))
and prxmatch("/hand|hip|cervical|shank/i",diagnosis)=0;

用这个估计可以筛出大部分想要的数据,你再用nodupkey 看下 有哪些特殊的,也看下除了knee 其他身体部分比如 shank 加到=0的parmatch

使用道具

报纸
zwnSAS121 发表于 2017-3-10 20:05:53 |只看作者 |坛友微信交流群
  1. /*解决实际问题之选出你想要的观测*/
  2. data a;
  3. input name$40.;
  4. cards;
  5. Osteoarthritis (OA)
  6. OA (Osteoarthritis)
  7. OA Knee
  8. Osteoarthritis Knee
  9. OA + hands
  10. Osteoarthritis, hands
  11. OA , hip
  12. OA
  13. Knee OA
  14. ? OA
  15. ;
  16. /*解决方法一(if 语句)*/
  17. data b;
  18. set a;
  19. if name in ('OA','Osteoarthritis','Osteoarthritis Knee','Osteoarthritis Knee');
  20. run;
  21. /*解决方法二(正则表达式)*/
  22. data b;
  23. set a;
  24. if _n_ = 1 then
  25. pattern = prxparse("/OA ?\(Osteoarthritis\)|Osteoarthritis ?\(OA\)|Osteoarthritis Knee|Knee OA/");
  26. retain Pattern;
  27. if prxmatch(pattern,name) then output;
  28. run;
  29. /*希望对你有帮助*/
复制代码

使用道具

地板
windlove 发表于 2017-3-11 07:29:01 |只看作者 |坛友微信交流群
lovexialulu 发表于 2017-3-10 16:23
if (prxmatch("/OA/",diagnosis) or prxmatch("/Osteoarthritis/i",diagnosis))
and prxmatch("/hand|h ...
谢谢回复。 之前已经提过了,没有办法列出来所有不需要的。因为数据非常大,非常杂乱。 还包括了其他的文字。 我列出来的只是一些较为正常的情况。我是想要一个比较通用的方法去取选项,而不是列出来那些不需要的。

使用道具

7
windlove 发表于 2017-3-11 07:39:28 |只看作者 |坛友微信交流群
zwnSAS121 发表于 2017-3-10 20:05
谢谢回复。 我需要的结果已经列在3 楼了, 你提供的两个方法都没有办法提出来我要的。

使用道具

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

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

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

GMT+8, 2024-4-20 06:35