SAS Function之FIND, FINDC, FINDW

SAS Function之FIND, FINDC, FINDW

Find Function 与 INDEX Function

参考自[Ron_Cody] SAS Functions by Example, Second Editio

FIND Function 与 INDEX Function 类似
如下表:

FIND String
INDEX
FINDC Individual Characters
INDEXC
FINDW Words
INDEXW

如上表所示:

  1. FIND和INDEX用于检索字符串中的“子字符串”;
  2. FINDC和INDEXC用于检索“独立的字符”;
  3. FINDW和INDEXW用于检索“单词”(单词是指分隔符做边界的字符串)。

PS关于”单词“,举个栗子!
“This is a string that consists by words.”
在上述句子中,每一个由分隔符空格”所“”的“字符串就是”单词“。这里的分割符不仅可以是空格,也可以是其它自定义的符号。在SAS中被定义为符号的符号包括:” ! ” # $ % & ’ ( ) * + , – .< = > ? @ [ \ ] ^ _ ` { | } ~/;:“

然而两类Function之间不同的是:FIND 类Function有一些INDEX类Function所不具有的功能,包括:

  1. FIND类可以检索所检索目标的”首次“出现位置;
  2. FIND类可以指定检索的方向(如:自左向右,自右向左);
  3. FIND类可以忽略字符串的大小写末尾的空格

FIND

Function FIND
目的 检索”字符串“中的”子字符串“。可附加选项:指定检索开始位置;检索方向;忽略大小写或末尾空格。
语法 FIND(character-value, find-string <,‘modifiers’> <,start>)
语法翻译 FIND(在里面搜索的变量或字符串, 想要搜索的变量或字符串 <,‘附加选项’> <,开始位置>)
character-value 任意SAS字符变量。
find-string 包含一个或多个字符的任意字符变量或字符串
modifiers: i 忽略大小写; t忽略末尾空格
start: 检索开始的位置。省略:从字符串开始进行检索;非零:从最左边第几个字符开始检索;正值:从左往右检索;负值:从右往左检索;负值且其绝对值长于子字符串长度:从右往左检索;正值且其值长于子字符串长度:从左往检索;

实例: STRING1 = “Hello hello goodbye” and STRING2 =“hello”

Function Returns 解读
FIND(STRING1, STRING2) 7 (position of “h” in hello) 从左往右检索“hello”中的h在第7个字符,此时按大小写匹配检索
FIND(STRING1, STRING2, ‘i’) 1 (position of “H” in Hello) 从左往右检索“hello”中的h在第1个字符,此时忽略大小写匹配检索
FIND(STRING1,“bye”) 17 (position of “b” in goodbye) 从左往右检索“bye”中的b在第17个字符,此时按大小写匹配检索
FIND(“abcxyzabc”,“abc”,4) 7 (position of second “a”) 从左往右检索从第4个字符起,忽略前面的“abc”三个字符,继续往后检索时“abc”中的a在第7个字符,此时按大小写匹配检索
FIND(STRING1, STRING2, ‘i’, -99) 7 (position of “h” in hello) 因为start定义为“-99”远高于string的长度,所以从右往左检索

FINDC

FINDW

哇,Markdown编辑器有点别扭,明天再续…