2012-09-05 170 views
1

一個字,我有variable1使用字符串如"asdfsad What do you do", "qwer What is your name", "Zebra"SAS:如何刪除的第一個字一個字符串,如果它等於在另一個變量

而且variable2用繩子"asdfsad", "qwer", "Animal"

我想刪除的第一個字從變量1中的字符串,如果它等於variable2中的單詞。到目前爲止,我唯一可以提出的是分別替換每個單詞:

variable1=tranwrd(variable1, "asdfsad", "");等,但我有很多詞語來代替。

非常感謝您的幫助。

回答

2

怎麼是這樣的:

data sample; 
    length variable1 variable2 $100; 
    variable1= "asdfsad What do you do"; variable2 = "asdfsad"; output; 
    variable1= "qwer What is your name"; variable2 = "qwer"; output; 
    variable1= "Zebra"     ; variable2 = "Animal"; output; 
run; 

data fixed; 
    length first_word $100; 

    set sample; 

    first_word = scan(variable1,1); 
    if first_word eq variable2 then do; 
    start_pos = length(first_word) + 1; 
    variable1 = substr(variable1,start_pos); 
    end; 
run; 

這將爲在整個第一字匹配工作。它留下剩餘文本中的空格或其他標點符號,但如果您願意,您應該可以輕鬆更改。

如果您的問題是匹配字符而不是整個第一個字,那麼這將是一個非常不同的問題,我會建議發佈一個新的問題。

+0

對不起,我遲到了接受答案 - 但我在過去兩個月一直在使用它 - 謝謝! – user1284978

0

如果您對tranwrd的結果滿意,也可以使用它。你只需要小心空白

variable1 = strip(tranwrd(variable1, strip(variable2), '')); 
+0

這可以刪除第一次出現以外的事件。 –

0
if scan(variable1,1)=variable2 then 
    variable1=substr(variable1,index(variable1," ")); 
0

這可能不會是有效的或可行的數千字的,但你可以通過prxchange

使用Perl的正則表達式(如 s/search/replacement/
/* words to match delimited by "|" */ 
%let words = asdfsad|qwer|Animal|foo|bar|horse; 

/* example data */ 
data example; 
    infile datalines dlm=',' dsd; 
    input string: $256.; 
datalines; 
asdfsad What do you do 
qwer What is your name 
Zebra 
food is in the fridge 
foo A horse entered a bar 
; 
run; 

/* cleaned data */ 
data example_clean; 
    set example; 

    /* 
    regular expression is: 
     - created once on first row (_n_ = 1) 
     - cached (retain regex) 
     - dropped at the end (drop regex). 
    */ 
    if _n_ = 1 then do; 
    retain regex; 
    drop regex; 
    regex = prxparse("s/^(&words)\s+//"); 
    end; 

    string = prxchange(regex, 1, string); /* apply the regex (once) */ 
run; 

在正則表達式(在prxparse構造)的^符號確保它在字的開頭唯一匹配,則|符號使其成爲「或」匹配和\s+匹配一個或多個空白字符(這就是爲什麼在我的示例中,「食物」不匹配)。

相關問題