gpt4 book ai didi

SAS PROC SQL : How to quickly search if a variable contain a full substring?

转载 作者:行者123 更新时间:2023-12-04 17:49:17 24 4
gpt4 key购买 nike

我在工作中遇到这样的问题:

栏目 Code有1000, 1200, A1000, B1200, AAA, BBB 等值。目前用空格隔开,有时由于数据输入不良而不止一个。我正在尝试检查记录是否包含我感兴趣的代码。
Interested_Code : 1000 或 A1000 或 444 或 555 或 A555 等。

我知道一个简单的解决方案 from this answer :

A.CODE LIKE CAT('% ', T3.Interested_Code, ' %')

我在 A.CODE 后面附加了一个前导和尾随空格以确保返回“完全”完全匹配。因为如果我只是这样做
A.CODE LIKE CAT('%', T3.Interested_Code, '%') or
A.CODE CONTAINS T3.Interested_Code

我会得到代码的误报 = 1000在一行包含代码 = A1000 ,这匹配部分代码,但不一定是正确的结果。

我的代码在上面工作,但它做了太多的测试而且速度很慢。 PROC SQL 中是否有更快或更智能的方法?主表大约有 10 万行,每行大约有 10-20 个代码。感兴趣的代码大约有 8k 个值。谢谢。

最佳答案

您可以使用 FINDWINDEXW , 查找“单词”(默认情况下,用空格或类似的东西分隔)。这可能比您的解决方案更好,特别是因为您找不到

"1000 "

因为它不是以空格开头,所以你这样做的方式。
proc sql;
create table final_codes as
select codes.*
from codes where exists (
select 1 from interested_codes
where findw(codes.code,trim(interested_codes.code)) > 0)
;
quit;

然而,这实际上是一个笛卡尔连接,而且非常慢。它必须加入所有可能的组合 - 8000 乘以 100,000,或有效地 8 亿临时行,然后再分割。无论你做什么,它都不会那么快。

在数据步骤中执行此操作会更有效,特别是因为您可以在找到匹配项后更轻松地停止。您可以将interested_codes 表放入哈希表或临时数组中,然后根据您的匹配频率,搜索interested_codes 表中的每个代码可能会更快,或者相反,但无论哪种方式,当您找到匹配项时都会停止(而不是做所有可能的组合)。

关于SAS PROC SQL : How to quickly search if a variable contain a full substring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com