我想使用 SAS SQL (proc sql) 确定电子邮件地址中连续辅音和元音的最大数量。输出应类似于下面列中的最大连续辅音和最大连续元音列(我在第一行中列出字符仅用于说明目的)。
需要注意的几点:
将特殊字符和数字字符视为计数终止符(例如,第 3 封电子邮件就是一个很好的例子,其中有 3 个辅音 (hf),然后是数字 (98),然后又是 2 个辅音 (jl)。输出应该仅为 2 (hf)。
我只对电子邮件的第一部分(@ 之前)感兴趣。
亲爱的社区,我如何实现这一目标?
E-mail Max of consecutive consonants Max of consecutive vowels
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0f6e7c6669676e65677b767c666069674f68626e6663216c6062" rel="noreferrer noopener nofollow">[email protected]</a> 5 (jhtys) 2 (io)
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a4c7ccd6cdd78acac5d7ccc2cdc1c8c0e4cccbd0c9c5cdc88ac7cbc9" rel="noreferrer noopener nofollow">[email protected]</a> 3 2
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c2d242a757426202d0c2b212d2520622f2321" rel="noreferrer noopener nofollow">[email protected]</a> 2 1
最佳答案
有一个名为 prxnext
的例程,在这里证明非常方便。
生成样本数据
data emails;
input email $32.;
datalines;
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0564766c636d646f6d717c766c6a636d456268646c692b666a68" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="35565d475c461b5b54465d535c505951755d5a4158545c591b565a58" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cfaea7a9f6f7a5a3ae8fa8a2aea6a3e1aca0a2" rel="noreferrer noopener nofollow">[email protected]</a>
;
进行计数
data checkEmails(keep = email maxCons maxVow);
set emails;
* Consonants;
re = prxparse("/[bcdfghjklmnpqrstvwxyz]+/");
start = 1;
stop = index(email,"@");
do until (pos = 0);
call prxnext(re,start,stop,email,pos,len);
maxCons = max(maxCons, len);
end;
* Vowels;
re = prxparse("/[aeiouy]+/");
start = 1;
stop = index(email,"@");
do until (pos = 0);
call prxnext(re,start,stop,email,pos,len);
maxVow = max(maxVow, len);
end;
run;
结果
Email MaxCons MaxVow
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b5d4c6dcd3ddd4dfddc1ccc6dcdad3ddf5d2d8d4dcd99bd6dad8" rel="noreferrer noopener nofollow">[email protected]</a> 5 2
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83e0ebf1eaf0adede2f0ebe5eae6efe7c3ebecf7eee2eaefade0ecee" rel="noreferrer noopener nofollow">[email protected]</a> 3 2
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="32535a540b0a585e5372555f535b5e1c515d5f" rel="noreferrer noopener nofollow">[email protected]</a> 2 1
关于email - 在 SAS SQL 中计算电子邮件地址中的连续辅音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37993126/