如何在SAS中找到子串的最后位置(索引函数的对位)

时间:2015-05-14 10:02:25

标签: function indexing sas

有一个字符串'6017> 6025> 6023> 6022> 6025> 6032'。我们怎么知道'6025'的最后位置? index函数只返回第一次出现的字符串。很难使用反向功能,因为它找不到一个字符。有什么好主意吗?

3 个答案:

答案 0 :(得分:10)

您可以使用FIND功能来解决问题。查看SAS documentation上的查找功能。对于您的问题,find函数的以下语法可以提供帮助。

FIND(input string,search string,start position)

因此,要以反方向查找文本,可以使用START POSITION的负值,该值将大于字符串的长度。因此,如果长度为8,则开始位置为-8或-9或-10等,以反向搜索

查看以下示例代码。

data _null_;
    x='6017>6025>6023>6022>6025>6032';
    y=find(x,'6025',-length(x));
putlog _all_;
run;

答案 1 :(得分:1)

您可能希望使用FINDW()而不是INDEX()或FIND()来避免仅匹配字符串中某个单词的一部分值。 FINDW()函数使您可以使用修饰符来执行诸如从头到尾搜索并去除前导/尾随空格的操作。

data test;
  length string $100 word $30 ;
  string = '6017>6025>6023>6022>6025>6032';
  do word='6025','6032','6017','602';
    location = findw(string,word,'>','bt');
    put word= location=;
  end;
run;

结果:

word=6025 location=21
word=6032 location=26
word=6017 location=1
word=602 location=0

答案 2 :(得分:0)

您可以使用FIND功能,例如写波纹管,其中20是搜索的起始位置

    data _null_;
        x='6017>6025>6023>6022>6025>6032';
        y=find(x,'6025',20);
    putlog _all_;
    run;