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

SAS - Text Parsing for Case Sensitive Characters

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

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

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

尝试 1:

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

尝试 2:

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

显然,上述两种尝试彼此相差不远,但我找不到(或想到)另一种方法。希望能有什么神秘的功能来拯救这里...

假设我明白你想做什么,你就很接近了 - 只是没有按照 'SAS' 的方式做事。

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

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