2015-01-08 205 views
2

我有我想要編輯的電子郵件列表。最後,我有很多電子郵件,例如@ institution.dk。我想要刪除的所有這些類型的電子郵件。左側的字符數量沒有相同的長度,因此我必須從右向左識別電子郵件。如何使用substring函數獲取SAS中單詞的最後部分?

我曾嘗試:

data B; 
set a; 
where var not equals 'institution.dk'; 
run; 

data B; 
set a; 
where var equals not 'institution.dk'; 
run; 

data B; 
set a; 
where substr(var,-1,14^= 'institution.dk'; 
run; 

data b; 
set a; 
var2=scan(trim(var),-1,14) ; 
run; 
data c; 
set b; 
if var2 ^= institution.dk; 
run; 

但沒有任何工作。如何讓SAS識別字符串的最後部分(從右到左計數),以便我可以刪除這些觀察值?

回答

0

一種方式是一個索引:

If index(var,"@institution.dk") then delete; 

另一種方法是使用正則表達式表達:

If prxmatch("#\@institution.dk#",var) then delete; 

另一種更爲有效的方式可能是使用調用掃描:

Call scan(var,-1,pos,len,"@"); 
Var2=substr(var,pos); 
If var2="institution.dk" then delete; 

1行創建pos和len後面的最後一個單詞的len變量,第2行創建了一個包含該信息的變量var2,第3行測試它是否與要排除的字符串匹配,如果該字符串返回爲true,則刪除它。

3

Scan是您的正確選擇。電子郵件只能有一個'@',對嗎?

email_account = scan(var,1,'@'); 
email_server = scan(var,2,'@'); 

現在你可以過濾你想要的。你不需要像上面兩個步驟:

data b; 
    set a; 
    length email_server $50; 
    email_server = scan(var,2,'@'); 
    if email_server ne 'institution.dk'; 
run; 

data b; 
    set a; 
    where scan(var,2,'@') ne 'institution.dk'; 
run; 

還有在SQL/WHERE(但不是IF或其他SAS數據步元素)的有用LIKE操作。 '%'在這裏是通配符。

data b; 
    set a; 
    where not (var like '%@institution.dk'); 
run; 
相關問題