B5. Stata 中的变量名称

整理人: 郭楚玉 (武汉大学)
邮箱:

1. 新变量的名称

新变量命名的基本规则主要有 3 个:

  • 由英为 字母数字_ 组成,至多不超过 32 个字符
  • 首字符必须为 字母_
  • 英文字母的大写和小写具有不同的含义

示例:

  • 合理变量名: roa, abc_1, a1, Gdp_growth
  • 非法变量名: 5gdp, 2invest

特别注意:建议不要使用 _ 作为变量的第一个字母,因为许多 Stata 的内部变量都是以 _ 开头的,如:_n, _N, _cons, _b 等等。 详情参见 help _variables ([U] variables)。

2. 变量重命名

我们往往需要对原始数据进行加工,如取对数,计算比率、增长率等。这涉及到对旧变量的更名。这里主要介绍三个命令:

  • 单个变量重命名:help rename
  • 批量重命名:help rename group
  • 批量添加前缀或后缀:help renvars

下面使用 Stata 自带的 auto.dta 数据集进行展示:

sysuse "auto.dta", clear

order make price rep78 mpg foreign trunk

rename make mk

rename (price rep78) (Price REP78) // 批量重命名

rename mpg foreign trunk, upper    // 大写

renvars hea wei len, prefix(d1_)

图1:变量命名
图一:变量名称更改前后对比

3. 变量标签

因为变量的命名有字符长度限制,更详细的解释内容可以放入变量标签内。为变量附加文字标签可以使用 label var 命令,例如

sysuse "nlsw88.dta", clear

label var price "汽车价格($)"
label var rep78 "维修次数"`
des

图2:变量标签
图二

4. 数字-文字对应表

在数据分析中,类别变量通常是以数字表示的。为了便于理解和解读,我们可以为这些数字赋予相应的文字标签,从而使得数据的展示更加直观。通过 Stata 中的 label definelabel value 命令 ([D] label),我们可以方便地为数字变量添加标签。

例如,假设我们有一个代表满意度的类别变量,该变量的数值范围从 1 到 5,分别代表不同的满意度级别:1 - 很好2 - 较好3 - 中等4 - 较差5 - 很差。通过这种方式,数据的含义变得更加清晰易懂。

示例

假设我们使用 Stata 内置的 auto.dta 数据集,其中有一个变量 rep78 代表某些汽车的维修评级。我们可以通过以下命令为该变量定义数字与文字之间的映射关系:

sysuse "auto.dta", clear

label define rep78 1 "很好" 2 "较好" 3 "中等" 4 "较差" 5 "很差"   
label value rep78 rep78

browse rep78

执行上述命令后,rep78 变量的数值将以文字形式显示。例如,原本的数值 1 会显示为 “很好”,2 显示为 “较好”,以此类推。部分代码解释如下:

  1. label define rep78 1 "很好" 2 "较好" 3 "中等" 4 "较差" 5 "很差":这行命令定义了一个标签 rep78,并将数字 1 到 5 分别映射到相应的文字标签。
  2. label value rep78 rep78:这行命令将已定义的标签应用到变量 rep78 上,使得该变量的数值显示为对应的文字标签。

5. 列示和查看变量

常用的命令有:

  • describe:查看数据概况,包括存贮路径、样本数、变量个数、变量名称和标签等信息 (可以简写为 d)
  • ds:仅列示变量名称
  • ds, alpha:按首字母顺序列示变量名称
  • des2:外部命令,点击蓝色链接可查看类别变量频数分布和数字-文字对应表
sysuse "nlsw88.dta", clear

des

Contains data from /Applications/Stata/ado/base/n/nlsw88.dta
  obs:         2,246                          NLSW, 1988 extract
 vars:            17                          1 May 2016 22:52
 size:        60,642                          (_dta has notes)
---------------------------------------------------------------------
              storage   display    value
variable name   type    format     label      variable label
---------------------------------------------------------------------
idcode          int     %8.0g                 NLS id
age             byte    %8.0g                 age in current year
race            byte    %8.0g      racelbl    race
married         byte    %8.0g      marlbl     married
never_married   byte    %8.0g                 never married
grade           byte    %8.0g                 current grade completed
collgrad        byte    %16.0g     gradlbl    college graduate
south           byte    %8.0g                 lives in south
smsa            byte    %9.0g      smsalbl    lives in SMSA
---------------------------------------------------------------------
Sorted by: idcode

.   ds
idcode      race     never_marr~d  collgrad  smsa  
industry    union    hours         tenure
age         married  grade         south     c_city
occupation  wage     ttl_exp

.   ds, alpha
age     collgrad  hours   industry  never_marr~d  race  south   ttl_exp  wage
c_city  grade     idcode  married   occupation    smsa  tenure  union

des2命令提供的蓝色链接,点击可查看更详细的数据特征。可以完全替代 des 命令。

图4:列示变量

其中,value label 下方的蓝色链接点开会显示该变量里分类细分。点击左侧的变量,会显示该变量的频数、占比和累计占比。

6. 查找变量

对大型数据而言,变量数量太多,从右上角的变量窗口浏览查找也不高效。look for 命令可以帮助我们迅速缩小搜寻范围,快速找到目标。下面我们分别用系统自带的 nlsw8.dta 数据集和一个包含 444 个变量的大型数据样本来展示如何快速找到相关的变量:

. sysuse nlsw88, clear

. lookfor age

              storage   display 
variable name   type    format     variable label
------------------------------------------------------
age             byte    %8.0g      age in current year
wage            float   %9.0g      hourly wage
use d_lookfor, clear

des

Contains data from d_lookfor.dta
  obs:            30                          
 vars:           444                 1 Nov 2018 14:55
 size:        65,520                          
-----------------------------------------------------
              storage   display  
variable name   type    format        variable label
-----------------------------------------------------
stkcd           double  %12.0g        证券代码
accper          double  %8.0g         会计期间
sgnyea          str1    %9s           年度标识
typrep          str1    %9s           报表类型
spetre          str1    %9s           特殊处理
a110101         float   %9.0g         货币资金
a110201         float   %9.0g         短期投资
a110213         float   %9.0g         短期投资跌价准备
a110227         float   %9.0g         短期投资净额
a110235         float   %9.0g         股票投资跌价准备
【此处省略中间的变量】                   
v379st          str3    %9s           下市原因
----------------------------------------------------
Sorted by: stkcd  accper

lookfor "现金流"

              storage   display
variable name   type    format     variable label
-----------------------------------------------------------
d110000         double  %10.0g     经营活动产生的现金流入小计
d120000         double  %10.0g     经营活动产生的现金流出小计
d100000         float   %9.0g      经营活动产生的现金流量净额
d210000         float   %9.0g      投资活动产生的现金流入小计
d220000         float   %9.0g      投资活动产生的现金流出小计
d200000         float   %9.0g      投资活动产生的现金流量净额
d310000         double  %10.0g     筹资活动产生的现金流入小计
d320000         float   %9.0g      筹资活动产生的现金流出小计
d300000         float   %9.0g      筹资活动产生的现金流量净额
d610000         float   %9.0g      经营活动产生的现金流量净额


lookfor "报酬"

              storage   display   
variable name   type    format     variable label
----------------------------------------------------------------
y1002b          double  %10.0g     董事、监事及高管前三名报酬总额
y1003b          double  %10.0g     董事前三名报酬总额
y1005b          double  %10.0g     高管前三名报酬总额
y1101a          byte    %8.0g      未领取报酬的董事、监事及高管人数
y1102a          byte    %8.0g      未领取报酬董事人数
y1103a          byte    %8.0g      未领取报酬监事人数

look for 相关的另外两个外部命令,同学们可以使用帮助文件 help lookfor_allhelp findname,按照自己需要进行了解。