如何在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中的正则表达式解析速度很慢。如果要解析大量字符串,那么这不是最有效的方法。如果你只有不到几千个,你不会注意到有什么不同。