SAS中文论坛

标题: 求教:如何用sql做动态模糊查询? [打印本页]

作者: shiyiming    时间: 2010-3-25 01:24
标题: 求教:如何用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;
作者: shiyiming    时间: 2010-3-25 08:56
标题: 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]
作者: shiyiming    时间: 2010-3-25 10:05
标题: 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]
作者: Qiong    时间: 2010-3-25 10:20
标题: 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;
作者: shiyiming    时间: 2010-3-25 10:30
标题: Re: 求教:如何用sql做动态模糊查询?
sorry, 答案重复了。
作者: shiyiming    时间: 2010-3-25 10:47
标题: 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了
作者: shiyiming    时间: 2010-3-29 10:41
标题: Re: 求教:如何用sql做动态模糊查询?
非常感谢教导Q_Q!

(每次看解答都会觉得自己很笨啊....)




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2