indexing - SAS 索引函数 - 使用另一列的值搜索一列
问题描述
使用索引函数返回字符串在字符串中的位置时遇到问题。
所以我有一个集中的姓氏列表:
SMITH|JONES|DONALD
我想找到从另一列(SurnametoFind)引用的字符串的位置,所以:
index(Surnames,'SMITH')
但是,当我引用要使用该值进行搜索的列时,效果很好(其中一行包含 SMITH 的单个姓氏列表):
index(Surnames,SurnametoFind)
返回 0。
这是在 SQL 过程中,所以我也尝试使用通配符(以防索引函数,如 SQL Server 上的 PATINDEX):
index(Surnames,'%'||SurnametoFind||'%')
但这也返回零。
我是否遗漏了有关如何在索引函数中引用 SurnametoFind 列的内容?
非常感谢。
解决方案
主要问题是您没有考虑到 SAS 将字符变量存储为固定长度的事实。因此,如果SurnametoFind
足够长以存储“DONALD”,那么当值为“SMITH”时,H 之后至少有一个空格。因此在字符串“SMITH|JONES|DONALD”中找不到字符串“SMITH”。
您可以使用 TRIM() 函数删除试用空间。
index(Surnames,trim(SurnametoFind))
但由于您的列表是分隔的,您可能希望改用该FINDW()
函数。有了它,您可以告诉它哪些字符分隔正在搜索的字符串中的“单词”。它还具有修饰符,可让您告诉它为您进行修剪(和其他功能)。
findw(Surnames,SurnametoFind,'|','t')
推荐阅读
- image - 使用精确的规格将 JPG 转换为 BMP
- c# - 将文本文件信息格式化为构造函数 c#
- reactjs - 配置 ES7 React/Redux/GraphQL/React-Native 片段
- python - 如何阻止 tkinter 画布小部件 / after 方法跳过列表中的元素?
- amazon-web-services - 我的 AWS Route 53 S3 简单托管设置中缺少什么?
- asp.net-core - 存储到 ContentRootPath 的 ASP.NET Core 数据保护密钥在不同的机器上不起作用
- ios - Xamarin Forms:迁移到 IOS 无法在指定的 IL 偏移量上设置断点
- kivy - 不可能在 android 上使用 kivy 视频(在 Android 上使用 kivy 的另一个问题?)
- maven - Maven 丢失了 checkstyle 配置
- reactjs - SetState 更新但不保存