我在从一系列符号清理自由格式文本字符串时遇到一些问题。此任务的最后一部分涉及识别任何名称,并从字符串中删除它们。幸运的是,所有名称都是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;
显然,上述两种尝试彼此并不太远,但我找不到(或想到)另一种方法。希望在这里拯救一些神秘的功能......
答案 0 :(得分:2)
假设我明白你想做什么,你就会关闭 - 只是不做“SAS'方式。
FIND
有两个兄弟姐妹FINDC
和FINDW
。 FINDC
在字符列表中找到一个字符,听起来就像你想要做的那样。它有很多选项可以添加字符列表;你不能只是给它A-Z
,因为它会添加这三个字符,但你可以给它一个U
选项来添加大写字符。
DATA TEST;
SET SAMPLE;
_endpos= FINDC(TXT,,'u');
ID = substr(TXT,1,_endpos-1);
RUN;