2016-02-21 96 views
2

我有一個包含作者所屬地址的數據集。地址有不同的長度。但是第一個逗號前面的信息是他所在機構的名稱,以及最後一個逗號後的國家。我想要做的是提取國家併爲其創建一個新變量。如何從字符串中提取特定信息

我在Stata中試過這段代碼。它的作用是提取機構的名稱。

generate splitat = strpos(institutions ,",") 

generate str80 univ = substr(institutions, 1, splitat - 1) 

我在想這個代碼是否也可以用來提取國家。 我以爲它可以從頭開始檢查,而不是從頭開始?

我的數據集看起來像下面的例子:

Natl Taiwan Univ, Inst Epidemiol, Taipei 106, Taiwan 

Radboud Univ Nijmegen, Inst Water & Wetland Res, Dept Anim Ecol & Ecophysiol, NL-6525 AJ Nijmegen, Netherlands 

回答

3

有在Stata特定功能14+查找字符串中的子字符串(例如一個特定的字符)的最後一次出現。有關strrpos()的文檔,請參見Stata 14中的help string functions

如果這不在您的Stata版本中,您只需將字符串反轉,使用您已知的方法找到子字符串,然後將您找到的方法取消。

如果不使用最新版本的Stata的,它始終是指定在支持Stata的問題,任何論壇的問題是一個好主意,

clear 
input str244 institutions 
"Natl Taiwan Univ, Inst Epidemiol, Taipei 106, Taiwan" 
"Radboud Univ Nijmegen, Inst Water & Wetland Res, Dept Anim Ecol & Ecophysiol, NL-6525 AJ Nijmegen, Netherlands" 
end 
compress 
gen country = substr(institutions, strrpos(institutions, ",") + 1, .) 
local rev strreverse(institutions) 
gen country2 = strreverse(substr(`rev', 1, strpos(`rev', ",") - 1)) 

assert country == country2 

l country 

    +--------------+ 
    |  country | 
    |--------------| 
    1. |  Taiwan | 
    2. | Netherlands | 
    +--------------+ 
+2

那些誰看中的正則表達式會發現,'根country3 =正則表達式(1)如果regexm(院校,「^。*,([^,] *)$」)'也可以完成這項工作。 –

+0

謝謝。你的兩條建議都非常有幫助。 –