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
有两个兄弟姐妹,FINDC
和 FINDW
。 FINDC
在字符列表中找到一个字符,这听起来像你想做的。它有很多用于添加字符列表的选项;你不能只给它 A-Z
因为那样会添加这三个字符,但你可以给它一个 U
选项来添加大写字符。
DATA TEST;
SET SAMPLE;
_endpos= FINDC(TXT,,'u');
ID = substr(TXT,1,_endpos-1);
RUN;
我在从一系列符号中清理自由格式文本字符串时遇到了一些问题。此任务的最后一部分涉及识别任何名称,并将它们从字符串中删除。幸运的是,所有名字都是 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
有两个兄弟姐妹,FINDC
和 FINDW
。 FINDC
在字符列表中找到一个字符,这听起来像你想做的。它有很多用于添加字符列表的选项;你不能只给它 A-Z
因为那样会添加这三个字符,但你可以给它一个 U
选项来添加大写字符。
DATA TEST;
SET SAMPLE;
_endpos= FINDC(TXT,,'u');
ID = substr(TXT,1,_endpos-1);
RUN;