SAS - 区分大小写的文本解析

时间:2016-03-17 18:14:03

标签: sas text-parsing

我在从一系列符号清理自由格式文本字符串时遇到一些问题。此任务的最后一部分涉及识别任何名称,并从字符串中删除它们。幸运的是,所有名称都是U-Cased(总是),相关信息放在名称之前(总是)。

我的第一个想法是使用FIND功能来隔离名称的起始位置,然后只输出起始位置之前的所有字符...但我无法确定如何使用“外卡”之类的选项来抓住起点任何大写字母的位置。下面的示例和尝试包括 -

DATA SAMPLE;
INPUT TXT $;
CARDS;
firsT 
Second
thIrd 
foUrth
;
RUN;

Attempt1:

DATA TEST;
SET SAMPLE;
ID = FIND(TXT,'A'-'Z');
RUN;

ATTEMPT2:

DATA TEST;
SET SAMPLE;
ID = FIND(TXT,'A-Z');
RUN;

显然,上述两种尝试彼此并不太远,但我找不到(或想到)另一种方法。希望在这里拯救一些神秘的功能......

1 个答案:

答案 0 :(得分:2)

假设我明白你想做什么,你就会关闭 - 只是不做“SAS'方式。

FIND有两个兄弟姐妹FINDCFINDWFINDC在字符列表中找到一个字符,听起来就像你想要做的那样。它有很多选项可以添加字符列表;你不能只是给它A-Z,因为它会添加这三个字符,但你可以给它一个U选项来添加大写字符。

DATA TEST;
  SET SAMPLE;
  _endpos= FINDC(TXT,,'u');
  ID = substr(TXT,1,_endpos-1);
RUN;