作者qsiu (Kate)
看板Statistics
标题Re: [程式] SAS 栏位字串的比对(包含的概念)
时间Thu Jun 2 15:20:26 2022
data main;
input text $20. ;
cards;
芒果20颗+苹果10粒
今天吃西瓜*1
苹果2颗
今年下雨荔枝泡汤了
芒果20颗;香蕉2跟
香蕉,4根
;
data list;
input list $ ;
cards;
芒果
苹果
;
proc sql noprint;
select distinct list into : list_1 separated by "#"
from list
;quit;
%put &list_1;
%macro out1 ;
data main1;
set main;
%let v1=1;
%do %until (%length(%scan(&list_1.,&v1,"#"))=0);
%let xvar1=%scan(&list_1.,&v1,"#");
text1=ksubstr(text,kfind(text,"&xvar1."),2);
if missing(text1)=0 then output;
%let v1=%eval(&v1+1);
%end;
run;
%mend out1;
%out1;
我直接用你提供的范例资料做测试
有问题可以再讨论
※ 引述《linda841004 (水凝结)》之铭言:
: [软体程式类别]:SAS
: [程式问题]:资料处理
: [软体熟悉度]:熟悉
: [问题叙述]:
: 有两个档案:
: 档案1为「被比对的清单」如图
: http://i.imgur.com/vDbKe11.jpg
: 档案2为「比对清单」如图
: http://i.imgur.com/j6Fec8H.jpg
: 操作概念为:
: 如果比对清单内的比对内容栏位,
: 有‘包含’在被比对清单的文字段栏位中,
: 则比对成功,
: 并输出被比对清单的撷取栏位值
: (结果如下图)
: http://i.imgur.com/utpRZdm.jpg
: 因比对清单很多,想问问看有没有什麽方法可以处理此问题呢?
: 感谢各位相助~~~
: [程式范例]:
: 目前使用的方法会因为比对清单过多而写到疯掉(现已先用此方法解决[有借助excel]),
: 想请教有无更好的方法解决呢?
: 程式如下:
: %macro output(a,b,c);
: proc sql;
: create table &c. as
: select 文字段,&b. as 比对内容
: from TEST1
: where 文字段 like (&a.)
: ;
: quit;
: %mend;
: %output('%苹果%','苹果',t1);
: %output('%芒果%','芒果',t2);
: /*如有多的清单则往下加*/
: data all_list;
: set t1-t100;
: run;
: (111/6/2补充:借助excel的方法)
: http://i.imgur.com/oKfMxim.jpg
: 再补充:
: 被比对资料几万笔、比对资料约数百笔
: 再次感谢各位大大们~~
: -----
: Sent from JPTT on my Google Pixel 6.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.11.127 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1654154428.A.B33.html
1F:推 linda841004: 谢谢大大!现在遇到的瓶颈是如比对内容栏位字数不一 06/02 22:02
2F:→ linda841004: 致,就无法完整抓出 06/02 22:02
3F:→ linda841004: 我在研究看看! 06/02 22:02
4F:→ linda841004: “再” 06/02 22:03
5F:→ qsiu: text1=ksubstr(text,kfind(text,"&xvar1."),klength(“&xvar 06/02 22:37
6F:→ qsiu: 1.”)); 06/02 22:37
7F:→ qsiu: 字数问题的话,这段应该可以改成这样 06/02 22:37
8F:推 linda841004: 大感谢!!!! 06/02 23:31