如何在sas中提取字符串的一部分

问题描述 投票:0回答:2

我在一列中有多个值,我想要提取它的一部分。让我们在我的专栏A中考虑

A                        B
wwwgooglecom             google
wwwyoutubecom            youtube
wwwwwwwebcom             wwwweb
wwwmywebsiteisgoodcom    websiteisgood
www.fxr.com              fxr

我想从上面的列A中提取www和com。要实现这个我应该使用哪个sas函数? B列显示预期输出。我尝试使用substr函数。

a1 = substr(A,3,1);
a2 = substr(A,3,-1);
b  = cat(a1,a2);
sas sas-macro
2个回答
1
投票

我建议使用执行Perl正则表达式匹配和替换的SAS PRX *系列函数。

此示例使用PRXCHANGE搜索:

  • 开始www,然后是
  • 零或一个时期\.?,其次是
  • 这是一个非贪婪的任何组合(.*?),最多
  • 结束零或一个时期\.?,然后是
  • 结束com

捕获的组$1用作替代品。

data whatsup;
length a b $80;
input A& B&;

c = prxchange('s/^www\.?(.*?)\.?com$/$1/', 1, trim(a));

put / a= / b=/ c=;

datalines;
wwwgooglecom             google
wwwyoutubecom            youtube
wwwwwwwebcom             wwwweb
wwwmywebsiteisgoodcom    websiteisgood(bad sample data?)
www.fxr.com              fxr
run;

有些替代方案可以使用PRXMATCH


0
投票

尝试在作业的LHS上使用INDEX()函数和substr()。您还可以使用.函数删除compress()

data test;
format A $32.;
input A $;
datalines; 
wwwgooglecom
wwwyoutubecom
wwwwwwwebcom
wwwmywebsiteisgoodcom
www.fxr.com
;

data want;
set test;
B = compress(A,".");
if index(B,"www") then
    substr(B, index(B,"www"), 3) = "";
if index(B,"com") then
    substr(B, index(B,"com"), 3) = "";
B = strip(B);
run;
© www.soinside.com 2019 - 2024. All rights reserved.