gpt4 book ai didi

sas - 计算一个词出现的次数

转载 作者:行者123 更新时间:2023-12-04 14:33:01 25 4
gpt4 key购买 nike

我正在 SAS 中寻找一种更好的方法来计算某个单词在字符串中出现的次数。例如,在字符串中搜索 'wood':

how much wood could a woodchuck chuck if a woodchuck could chuck wood

... 将返回 2 的结果。

这是我通常会做的,但它有很多代码:

data _null_;
length sentence word $200;

sentence = 'how much wood could a woodchuck chuck if a woodchuck could chuck wood';
search_term = 'wood';
found_count = 0;

cnt=1;
word = scan(sentence,cnt);
do while (word ne '');
num_times_found = sum(num_times_found, word eq search_term);
cnt = cnt + 1;
word = scan(sentence,cnt);
end;

put num_times_found=;

run;

我可以将其放入 fcmp 函数中以使其更优雅,但我仍然觉得必须为此编写更友好、更简洁的代码。

最佳答案

从代码审查的角度来看,上述内容可以有所改进。 do 循环可以处理 cnt 增量,如果将其切换为 until,您甚至不必进行初始赋值。您还有一个无关的变量 found_count,不确定那是什么。否则,我认为这是合理的,至少对于非复杂的解决方案而言。

data _null_;
length sentence word $200;

sentence = 'how much wood could a woodchuck chuck if a woodchuck could chuck wood';
search_term = 'wood';

do cnt=1 by 1 until (word eq '');
word = scan(sentence,cnt);
num_times_found = sum(num_times_found, word eq search_term);
end;

put num_times_found=;

run;

它也非常快 - 在我的盒子上 1e6 次迭代不到 9 秒。当 o 添加到字符串选项时,PRX 解决方案花费的时间更少(6 秒),因此在使用非常大的数据集或大量变量时可能更可取,但我怀疑增加的时间相比之下会很重要到 i/o 时间。 FCMP 解决方案与此解决方案的时间顺序相同(均在 8-9 秒左右)。最后,FINDW 解决方案是最快的,大约需要 2 秒。

关于sas - 计算一个词出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35367159/

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