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

SAS-区分大小写字符的文本解析,sas,text-parsing,Sas,Text Parsing,我在清理一系列符号中的自由格式文本字符串时遇到了一些问题。此任务的最后一部分涉及识别任何名称,并将其从字符串中删除。幸运的是,所有名称都是U字型的(始终),并且相关信息放在名称之前(始终) 我的第一个想法是使用FIND函数来隔离名称的起始位置,然后只输出起始位置之前的所有字符……但我无法确定如何使用类似“通配符”的选项来获取任何大写字母的起始位置。样本和尝试包括在下面- DATA SAMPLE; INPUT TXT $; CARDS; firsT Second thIrd foUrth ;

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

我的第一个想法是使用FIND函数来隔离名称的起始位置,然后只输出起始位置之前的所有字符……但我无法确定如何使用类似“通配符”的选项来获取任何大写字母的起始位置。样本和尝试包括在下面-

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
有两个兄弟节点,
FINDC
FINDW
。在字符列表中查找单个字符,听起来像是您要执行的操作。它有很多添加字符列表的选项;您不能只给它
A-Z
,因为这会添加这三个字符,但您可以给它一个
U
选项来添加大写字符

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

这是我一直在寻找的功能!只需要确认一下……因为人们的名字可以以任何字母开头……我假设在指定源代码(本例中为TXT)后的空引用“,”是我需要的“通配符”风格?空引用是指显式的字符列表。IE findc(txt,,'u')等同于findc(txt,'ABCDEFGHIJKMNOPQRSTUVWXYZ')。如果愿意,您可以将可选的第三个参数与其他单个字符组合(如空格、破折号或类似字符)。您可能知道最后两个问题(这一个问题和您为我回答的前一个问题)是同一任务的一部分。我有一个问题也和这个任务有关…我如何找到字符串中一行两个大写字母(非显式)的条件?我是否应该将此作为单独的问题发布?