Stata应用Unicode处理中文

彭华@StataCorp

2017 Stata 中国用户大会

Stata处理中文

  • 所有可以使用字符的地方都可以使用中文
  • 支持全部Unicode,使用UTF-8字符编码
  • 整套相应的Stata和Mata字符函数

中文数据文件

. use auto_zh.dta, clear
(1978年汽车数据)

. summ 里程 价格

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
        里程 |         74     21.2973    5.785503         12         41
        价格 |         74    6165.257    2949.496       3291      15906

命令

. regress 里程 价格 

      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =     20.26
       Model |  536.541807         1  536.541807   Prob > F        =    0.0000
    Residual |  1906.91765        72  26.4849674   R-squared       =    0.2196
-------------+----------------------------------   Adj R-squared   =    0.2087
       Total |  2443.45946        73  33.4720474   Root MSE        =    5.1464

------------------------------------------------------------------------------
        里程 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        价格 |  -.0009192   .0002042    -4.50   0.000    -.0013263   -.0005121
       _cons |   26.96417   1.393952    19.34   0.000     24.18538    29.74297
------------------------------------------------------------------------------

作图

其他语言

Unicode

  • 字符集支持一切现代与大部分历史文献
  • 数字顺序代表其逻辑顺序
  • 已分配的字符与语义不再改变。
  • 与其他常用字符集可精确转换。

UTF-8

  • 不定长度1-6字节
  • 兼容ASCII
  • 所有网际网络协议和email协议必须支持

函数

  • 长度
  • 分割,组合,替换
  • 词组
  • 正则表示
  • 与Stata相关的显示处理

字符长度

Unicode代码

. di ustrtohex("温州")
\u6e29\u5dde

. di ustrunescape("\u6e29\u5dde")
温州

UTF-8编码

. di tobytes("温州")
\d230\d184\d169\d229\d183\d158

. di char(230)+char(184)+char(169)
温

长度

. di strlen("温州")
6

. di ustrlen("温州")
2

分割,组合,替换

. di usubstr("温州商学院", 3, .)
商学院
. local  pos    = ustrpos("温州,商学院", ",")

. local  before = usubstr("温州,商学院", 1, `pos'-1)

. local  after  = usubstr("温州,商学院", `pos'+1, .)

. di "`before'`after'"
温州商学院

词组

. di ustrwordcount("实践是检验真理的唯一标准")
7

. di ustrword("实践是检验真理的唯一标准", 1)
实践

. di ustrword("实践是检验真理的唯一标准", 2)
是

. di ustrword("实践是检验真理的唯一标准", 3)
检验

. di ustrword("实践是检验真理的唯一标准", 4)
真理

. di ustrword("实践是检验真理的唯一标准", 5)
的

. di ustrword("实践是检验真理的唯一标准", 6)
唯一

. di ustrword("实践是检验真理的唯一标准", 7)
标准

正则表示

. di ustrregexm("Wenzhou Business School", "[\u4e00-\u9fa5]")
0

. di ustrregexm("Wenzhou Business School 温州商学院", "[\u4e00-\u9fa5]")
1

. di ustrregexra("Wenzhou Business School 温州商学院", "[\u4e00-\u9fa5]", "")
Wenzhou Business School 

如何转换GB18030数据文件或文本文件

  • unicode translate
  • unicode encoding

谢谢