知道stata裡可以用正規表示式,還是研究生階段非常後期了,不過一直沒有仔細研究過。這次碰到乙個需求,需要把一組文字和數字混合的字串中的數字提取出來,字串形式大體如下:
10萬 8萬
人民幣30萬
查了一些資料,發現這個問題用正規表示式比較方便,就趁著這個機會研究了一下stata裡的正規表示式。stata一共提供了三個命令:regexm(s,re), regexr(s1,re,s2), regexs(n)。語法中的re都是正規表示式的匹配規則,s或s1, s2則表示字串。這三個命令是針對ascii編碼的字元,如果是unicode字元,對應的命令分別是ustrregexm(s,re[,noc]), ustrregexrf(s1,re,s2[,noc]), ustrregexra(s1,re,s2[,noc]), ustrregexs(n).
regexm(s,re): 對字串s,如果符合re表達的正規表示式規則,則為true或1。
regexr(s1,re,s2): 對字串s1,將符合re表達的正規表示式規則的第乙個字串替換為s2,如果沒有匹配的則返回s1本身。
regexs(n):在使用該命令之前,需要先使用regexm命令,它表示返回符合regexm匹配規則的第n個字串。
對於unicode適用的命令,不同的是ustrregexra多提供了可以替換所有符合匹配規則的字串,而不僅是第乙個,以及[noc]如果不指明,表示預設大小寫不同,如果指明為1,則表示大小寫不敏感。
對於正規表示式,其實重要的倒不是stata命令,而是正規表示式本身。這個我也沒什麼好辦法,只能結合例子和實際需求去學習了。或許下次我會簡單寫寫常用的正規表示式字串。
最後,關於上面我碰到的那個問題,最後發現其實可以用最簡單的destring去解決。destring命令提供了ignore選項,只要用這個選項將不必要的「人民幣」、「元」等文字去掉即可。另外,對於直接從excel匯入的資料中的千位數分隔符,ignore也可以很好地處理。
shell 邏輯表示式彙總(if,大小比較)
比較字串 判斷檔案是否存在及是否可讀等,通常用 來表示條件測試 注意 這裡的空格很重要。要確保方括號的空格 空格缺少或位置不對,if then elif then else fi命令解釋 f somefile 判斷是否是乙個檔案 x bin ls 判斷 bin ls是否存在並有可執行許可權 n va...
shell 比較邏輯表示式
a file 如果 file 存在則為真。b file 如果 file 存在且是乙個塊特殊檔案則為真。c file 如果 file 存在且是乙個字特殊檔案則為真。d file 如果 file 存在且是乙個目錄則為真。e file 如果 file 存在則為真。f file 如果 file 存在且是乙個...
數字正規表示式
驗證數字的正規表示式集 驗證數字 0 9 驗證n位的數字 d 驗證數字有0到兩位小數 0 9 0 9 驗證至少n位數字 d 驗證m n位的數字 d 驗證零和非零開頭的數字 0 1 9 0 9 驗證有兩位小數的正實數 0 9 0 9 驗證有1 3位小數的正實數 0 9 0 9 驗證非零的正整數 1 9...