SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1039|回复: 6
打印 上一主题 下一主题

求教:如何用sql做动态模糊查询?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-3-25 01:24:53 | 只看该作者

求教:如何用sql做动态模糊查询?

小弟想把数据集F里的数据,用数据集G里的关键词做模糊查询,
也就是如果用G里的关键词「abc」去查,
应该要查到F里的no.5;
如果用G里的关键词「aa」去查,
应该要查到F里的no.1.4.5。

想了好久,查了好久,都找不到怎么写动态模糊查询…..
愿大德先进有以教我,
感激!

Data F;
input No String $;
cards;
1  AAaaa
2  BBbbB
3  CCccC
4 AAbbCC
5  AAbC
6  DDdDD
7 D
8 Dd
;
run;

Data G;
input KeyWrd $;
cards;
aa
abc
bcd
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-3-25 08:56:09 | 只看该作者

Re: 求教:如何用sql做动态模糊查询?

一定要求是SQL吗?用宏可以不?小宏一个,仅供参考。

[code:gwd2kaer]%macro indexkw(input=,std=,output=);
data _NULL_;
        set &std end=eof;
        call symput('KW'||trim(left(put(_N_,best.))),trim(left(KeyWrd)));
        call symput('KWS'||trim(left(put(_N_,best.))),trim(left(put(_N_,best.))));
        if eof then call symput('KWNO',trim(left(put(_N_,best.))));
run;

data &output;
        set &input;
        %do i=1 %to &KWNO;
        if index(lowcase(String),lowcase("&&KW&i")) gt 0 then KWSEQ&i=input("&&KWS&i",best.);
        %end;
run;
%mend indexkw;

%indexkw(input=F,std=G,output=temp);
[/code:gwd2kaer]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-3-25 10:05:28 | 只看该作者

Re: 求教:如何用sql做动态模糊查询?

凑个热闹
[code:yrtd2u5x]Data F;
        input No String $;
datalines;
1 AAaaa
2 BBbbB
3 CCccC
4 AAbbCC
5 AAbC
6 DDdDD
7 D
8 Dd
;

Data G;
        input KeyWrd $;
datalines;
aa
abc
bcd
;

%macro temp(keyds,keyvar,raw,rawkey,outds=out);
        options nomprint nosymbolgen;
        %let dsid=%sysfunc(open(&keyds(keep=&keyvar),i));
        %do i=1 %to %sysfunc(attrn(&dsid,nlobs));
                %let rc=%sysfunc(fetchobs(&dsid,&i));
                %let keyval=%nrbquote(%)%upcase(%sysfunc(getvarc(&dsid,1)))%nrbquote(%);
                proc sql noprint;
                        create table &outds&i as
                                select * from &raw
                                        where upcase(&rawkey) like "&keyval";
                quit;
        %end;
        %let rc=%sysfunc(close(&dsid));
%mend;

%temp(g,keywrd,f,string)[/code:yrtd2u5x]
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
地板
发表于 2010-3-25 10:20:54 | 只看该作者

Re: 求教:如何用sql做动态模糊查询?

proc sql;
create table v as select  a.*,b.*
from G as a
left join F as b
on index(upcase(string),upcase(compress(KeyWrd)))  ;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-3-25 10:30:12 | 只看该作者

Re: 求教:如何用sql做动态模糊查询?

sorry, 答案重复了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-3-25 10:47:38 | 只看该作者

Re: 求教:如何用sql做动态模糊查询?

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 恩,这法子不错!
<!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? --> 还好我手快,copy了一下,要不就见不到beijing opera的sql了
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-3-29 10:41:23 | 只看该作者

Re: 求教:如何用sql做动态模糊查询?

非常感谢教导Q_Q!

(每次看解答都会觉得自己很笨啊....)
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-3-3 15:50 , Processed in 0.092259 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表