||
指示变量( 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
|
手机版|会员|至尊|接种|公卫人 ( 沪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.