楼主: jzhyue
10111 14

关于汉字转换拼音 [推广有奖]

11
jzhyue 发表于 2010-8-15 10:27:54
sungmoo 发表于 2010-8-15 07:53
*设两文件都在默认目录里(以下根据数据特点而定)
use 汉字string.dta,clear
g str=x
loc m="0 1 2 3 4 5 6 7 8 9 - _ ( ) + # @ J"
foreach i of loc m{
replace str=subinstr(str,"`i'","",.)
}
joinby str using 汉字转拼音对应表.dta
g xx=subinstr(x,str,py,.)
drop str py
谢谢sungmoo版主的热心解答!
仍有一个小问题:loca m的内容(非汉字字符)比较多,手工找有点儿麻烦。我用下代码查找,结果有“?"的符号产生,但又不是"?"(分解汉字造成的)除了手工删除外,有更好的drop删除方法否?
use C:\Users\yueyang\Desktop\汉字string.dta,clear
loca a:type x
loca b=subinstr("`a'","str","",.)
forvalue i=1/`b'{
gen x`i'=substr(x,`i',1)
}
stack x1-x12,into(y)
replace y=subinstr(y," ","",.)
duplicates drop y,force
levelsof y,loca(m)

12
sungmoo 发表于 2010-8-15 11:27:39
jzhyue 发表于 2010-8-15 10:27 仍有一个小问题:loca m的内容(非汉字字符)比较多,手工找有点儿麻烦。我用下代码查找,结果有“?"的符号产生,但又不是"?"(分解汉字造成的)除了手工删除外,有更好的drop删除方法否?
*除汉字外,其他字符对应的ASCII码是否只在33~126?如果是,可采用

use 汉字string.dta,clear
g str=x
forv i=33/126{
replace str=subinstr(str,char(`i'),"",.)
}
joinby str using 汉字转拼音对应表.dta
g xx=subinstr(x,str,py,.)
drop str py

13
jzhyue 发表于 2010-8-15 13:09:16
12# sungmoo
谢谢sungmoo版主。您总能从本质着手解决问题。衷心感谢!

14
sungmoo 发表于 2010-8-15 13:23:24
*若各观测值只有一个汉字,一个比较笨的方法找出其中汉字:
g xx=""
loc t=_N
forv j=1/`t'{
loc a=x[`j']
loc n=length("`a'")
forv i=1/`n'{
if substr("`a'",`i',1)>char(128){
replace xx=substr("`a'",`i',2) in `j'
continue,br
}
}
}

15
jzhyue 发表于 2010-8-15 18:25:33
sungmoo 发表于 2010-8-15 13:23
*若各观测值只有一个汉字,一个比较笨的方法找出其中汉字:
g xx=""
loc t=_N
forv j=1/`t'{
loc a=x[`j']
loc n=length("`a'")
forv i=1/`n'{
if substr("`a'",`i',1)>char(128){
replace xx=substr("`a'",`i',2) in `j'
continue,br
}
}
}
汉字0~5个不等,有的两个汉字之间夹杂有其他符号,用10#的方法将所有汉字找出过来,粘贴到excel之后形成单个汉字,单个汉字再转换成拼音,形成汉字拼音对应表。最后在stata中转换:
merg 1:1 _n using 汉字转拼音对应表
count if _merg==3
forvalue i=1 / `r(N)'{
replace x=subinstr(x,str[`i'],py[`i'],.)
}
drop str py _merg

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-30 12:33