首页 > 解决方案 > SAS 索引函数 - 使用另一列的值搜索一列

问题描述

使用索引函数返回字符串在字符串中的位置时遇到问题。

所以我有一个集中的姓氏列表:

SMITH|JONES|DONALD

我想找到从另一列(SurnametoFind)引用的字符串的位置,所以:

index(Surnames,'SMITH')

但是,当我引用要使用该值进行搜索的列时,效果很好(其中一行包含 SMITH 的单个姓氏列表):

index(Surnames,SurnametoFind)

返回 0。

这是在 SQL 过程中,所以我也尝试使用通配符(以防索引函数,如 SQL Server 上的 PATINDEX):

index(Surnames,'%'||SurnametoFind||'%')

但这也返回零。

我是否遗漏了有关如何在索引函数中引用 SurnametoFind 列的内容?

非常感谢。

标签: indexingsas

解决方案


主要问题是您没有考虑到 SAS 将字符变量存储为固定长度的事实。因此,如果SurnametoFind足够长以存储“DONALD”,那么当值为“SMITH”时,H 之后至少有一个空格。因此在字符串“SMITH|JONES|DONALD”中找不到字符串“SMITH”。

您可以使用 TRIM() 函数删除试用空间。

index(Surnames,trim(SurnametoFind))

但由于您的列表是分隔的,您可能希望改用该FINDW()函数。有了它,您可以告诉它哪些字符分隔正在搜索的字符串中的“单词”。它还具有修饰符,可让您告诉它为您进行修剪(和其他功能)。

findw(Surnames,SurnametoFind,'|','t')

推荐阅读