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