Hell_TRIAL21_o World
Good Mor_Trial9_ning
如何刪除_TRIAL21_
和_TRIAL9_
?
我所做的是我找到了第一個_和第二個_的位置。然後我想從第一個_和第二個_壓縮。但是壓縮功能不可用於這樣做。怎麼樣?
x = index(string, '_');
if (x>0) then do;
y = x+1;
z = find(string, '_', y);
end;
Hell_TRIAL21_o World
Good Mor_Trial9_ning
如何刪除_TRIAL21_
和_TRIAL9_
?
我所做的是我找到了第一個_和第二個_的位置。然後我想從第一個_和第二個_壓縮。但是壓縮功能不可用於這樣做。怎麼樣?
x = index(string, '_');
if (x>0) then do;
y = x+1;
z = find(string, '_', y);
end;
PERL正則表達式是識別這類字符串的好方法。 call prxchange
是將刪除相關字符的功能。它需要預先prxparse
來創建搜索和替換參數。
我在這裏使用modify
來修改現有的數據集,顯然你可能想用set
寫出一個新的數據集並首先測試結果。
data have;
input string $ 30.;
datalines;
Hell_TRIAL21_o World
Good Mor_Trial9_ning
;
run;
data have;
modify have;
regex = prxparse('s/_.*_//'); /* identify and remove anything between 2 underscores */
call prxchange(regex,-1,string);
run;
或者要創建一個新的變量和數據集,只需用prxchange
(不需要prxparse
)。
data want;
set have;
new_string = prxchange('s/_.*_//',-1,string);
run;
文本= 「Hell_TRIAL21_o世界好Mor_Trial9_ning」
var= catx("",scan(text,1,"_"),"__",scan(text,3,"_"),"_", scan(text,5,"_"))
注意變量var
的長度可能不希望您的case.Remember做出相應的調整。
謝謝! :D它適合我! – Yumi