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

时间:2017-12-28 17:35:19

标签: sas sas-macro

我在一列中有多个值,我想要提取它的一部分。让我们在我的专栏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);

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;