如何在sas中提取字符串的部分 我在一列中有多个值,我想提取其中的一部分。 A B wwwgooglecom google wwwyoutubecom youtube wwwwwwwebcom wwwweb wwwmywebsiteisgoodcom websiteisgood www.fxr.com fxr
尝试在赋值的左侧使用如何在sas中提取字符串的部分 我在一列中有多个值,我想提取其中的一部分。 A B wwwgooglecom google wwwyoutubecom youtube wwwwwwwebcom wwwweb wwwmywebsiteisgoodcom websiteisgood www.fxr.com fxr,sas,sas-macro,Sas,Sas Macro,尝试在赋值的左侧使用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 subs
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;
尝试在赋值的左侧使用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;
我建议使用执行Perl正则表达式匹配和替换的SAS PRX*函数系列
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;
本例使用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
我建议使用执行Perl正则表达式匹配和替换的SAS PRX*函数系列
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;
本例使用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
值得注意的是,SAS中的正则表达式解析速度很慢。如果要解析大量字符串,那么这不是最有效的方法。如果少于几千,则不会注意到差异。值得注意的是,SAS中的正则表达式解析速度很慢。如果要解析大量字符串,那么这不是最有效的方法。如果你只有不到几千个,你不会注意到有什么不同。