立即注册 登录
公卫人 返回首页

alian的个人空间 https://www.epiman.cn/?2 [收藏] [复制] [RSS]

日志

Stata 新建变量命令之tabulate:新建指示变量

已有 7267 次阅读2014-3-9 19:29 |个人分类:Stata 基础教程| 新建变量

指示变量( Indicator variables)就是我们熟悉的哑变量(Dummy variables )。在Stata里有四种新建指示变量的方式:第一种是使用generate命令,每次可创建一个指示变量;第二种是使用tabulate命令,每次可创建一组指示变量;第三种是使用recode/autocode命令,每次可创建一个指示变量;第四种是使用xi命令,直接使用指示变量。


第一种方式:generate命令和replace命令组合

实例(命令前的.不用输入,/**/之间的是程序注释):
. use http://www.ats.ucla.edu/stat/stata/notes/hsb2, clear /*读取UCLA大学的数据hsb2*/
(highschool and beyond (200 cases))
. tabulate prog,nolabel /*查看分类变量prog,不显示标签*/

      type of |
    program |      Freq.     Percent        Cum.
--------------+-----------------------------------
              1 |          45       22.50       22.50
              2 |        105       52.50       75.00
              3 |          50       25.00      100.00
--------------+-----------------------------------
        Total |        200      100.00

. gen prog1=0 /*新建变量prog1,并赋值为0*/
. replace prog1=1 if prog==1 /*当prog为1时,将prog1重新赋值为1*/
. replace prog1= . if missing(prog) /*当prog为缺失值时,将prog1重新赋值为缺失值*/

还有一个更简洁的命令:
. gen prog1= (prog==1) if !missing(prog) /*右边的表达式为真时,Stata返回值为1,否则为0*/
. gen prog1= prog==1 if !missing(prog) /*(prog==1) 的括号可以去除*/

依此类推,新建prog2和prog3。可以这种单调工作可以使用循环命令减轻工作量和降低出错率。
forvalues n=1/3 {
   gen  prog`n' = 0
   replace prog`n' = 1 if prog==`n'
   replace prog`n' = . if prog==.
}

forvalues n=1/3 {
gen prog`n'= (prog==0) if !missing(prog)
}

注:循环语句一般在do文件和ado文件中使用。

第二种方式:tabulate--Create indicator variables
tabulate命令非常强大,使用的频率非常高,这里介绍一下tabulate命令如何根据分类变量自动生成一组指示变量。
tabulate命令的一般语句:tabulate varname,generate(stubname) ;tabulate命令的菜单使用方法:Data > Create or change data > Other variable-creation commands > Create indicator variables。

实例(命令前的.不用输入,/**/之间的是程序注释):
. use http://www.ats.ucla.edu/stat/stata/notes/hsb2, clear /*读取UCLA大学的数据hsb2*/
(highschool and beyond (200 cases))
. tabulate prog, generate(prog) /*根据分类变量prog,新建一组指示变量prog1,prog2,prog3..*/

      type of |
    program |      Freq.     Percent        Cum.
--------------+-----------------------------------
      general |         45       22.50       22.50
   academic |        105       52.50       75.00
    vocation |          50       25.00      100.00
--------------+-----------------------------------
        Total |        200      100.00

. list  prog prog1 prog2 prog3 in 1/5,nolabel /*查看新建的指示变量的前无条记录,不显示标签*/


第三种方式:recode/autocode命令
recode -- Recode categorical variables
recode命令的一般语句:recode varlist (rule) , generate(newvar),recode命令的菜单使用方法:Data > Create or change data > Other variable-transformation commands >Recode categorical variable。

实例(命令前的.不用输入,/**/之间的是程序注释):
. use http://www.ats.ucla.edu/stat/stata/notes/hsb2, clear /*读取UCLA大学的数据hsb2*/
(highschool and beyond (200 cases))

. tabulate prog,nolabel /*查看分类变量prog,不显示标签*/

      type of |
    program |      Freq.     Percent        Cum.
--------------+-----------------------------------
              1 |          45       22.50       22.50
              2 |        105       52.50       75.00
              3 |          50       25.00      100.00
--------------+-----------------------------------
        Total |        200      100.00

.recode prog (1=1) (2 3 =0), generate(prog1) /*将prog的1编码为1,2或3编码为0,另存为prog1*/
.recode prog (2=1) (1 3 =0), generate(prog2)/*将prog的2编码为1,1或3编码为0,另存为prog1*/
.recode prog (3=1) (2 1 =0), generate(prog3)/*将prog的3编码为1,2或1编码为0,另存为prog3*/

autocode和recode命令类似,在此不多介绍。感兴趣可以help autocode查看使用方法。


第四种方式:使用因子变量(Factor variables)

实例(命令前的.不用输入,/**/之间的是程序注释):

. use http://www.ats.ucla.edu/stat/stata/notes/hsb2, clear /*读取UCLA大学的数据hsb2*/
(highschool and beyond (200 cases))

.xi,noomit i.prog /*生成指示变量 _Iprog_1~ _Iprog_3,并保留iprog_1*/
.xi,prefix(i) noomit i.prog /*生成指示变量 iprog_1~ iprog_3,并保留iprog_1*/
.xi,prefix(i)  i.prog /*生成指示变量 iprog_1~ iprog_3,并删除iprog_1*/


可以看出prefix(i)可将Stata默认的“_I”前缀改为“i”,而noomit选项是保留最小值的指示变量,因为多元分析时只需要n-1个指示变量,所以默认是删除最小值的指示变量的。

当然,如果需要在多元分析时使用指示变量,可以直接使用 i.prog.
. xi: regress write read math i.prog /*生成指示变量 _Iprog_1~ _Iprog_3,并删除iprog_1*/
. regress write read math i.prog /*Stata12及以上版本可去掉"xi:",生成临时指示变量。只在分析中使用,不会存到数据库中*/


其实还有第五种方式,众多有创新精神的Stata使用者自行编写了很多实用第三方命令,可以快速新建指示变量。比如dummies、todummy、todummies等,大家可以通过ssc install pkgname , replace 或 net install pkgname , replace 下载或更新。

软件传送门:Stata 12 SE 绿色版及使用手册(共17本)
http://www.epiman.cn/thread-33102-1-1.html

                                                                  


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

手机版|会员|至尊|接种|公卫人 ( 沪ICP备06060850号-3 )

GMT+8, 2024-4-28 03:09 , Processed in 0.026749 second(s), 6 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部