2015-06-09 93 views
1

數據:SAS:如何刪除兩個特定位置之間的單詞?

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; 

回答

2

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; 
+0

謝謝! :D它適合我! – Yumi

3

文本= 「Hell_TRIAL21_o世界好Mor_Trial9_ning」

var= catx("",scan(text,1,"_"),"__",scan(text,3,"_"),"_", scan(text,5,"_")) 

注意變量var的長度可能不希望您的case.Remember做出相應的調整。

+1

好的解決方案。 CATX()函數添加定界符,定義在第一個位置,也刪除前導和尾隨空白。 因此,如果你不需要任何分隔符,你應該使用CATS()函數,而不是將分隔符定義爲「」。 還記得貓的功能(cat catt貓catx)有200作爲標準長度。無論如何Yumi,你可以通過幾種方式達到同樣的效果。 查看sas中字符串函數的完整列表。 – stat

+1

謝謝你的注意 – yukclam9

相關問題