量化研究已经逐渐成为社会科学研究的主流,其重要地位无需赘述。好的选题+严谨的模型+熟练的软件操作=一篇好的论文对于Stata的操作而言,市场上的书籍、课程等琳琅满目, 而本文侧重于如何使用Stata完成一篇量化论文的数据处理,满满的干货,相信各位读者尤其是初学者如果能够操作一遍,一定会对Stata的运用有所掌握。
![]()
![]()
本文从数据清理、描述性统计、循环命令的使用、双变量分析、因子分析、线性回归、Logistic回归、表格输出等方面详细地介绍Stata的使用。
跑一个模型对于看似十分简单,的确也十分简单,只需要一行命令,但是“跑模型”的功夫尽在“模型”前。在这里,我们利用CGSS2015数据,假定来研究“钱能买来快乐吗?”即收入对主观幸福感的影响
方法1:通过命令方式
use "D: cgss2015_14.dta", clear
方法2:窗口点击(更推荐,不用写路径)
点击菜单栏第一个文件夹的标志,然后打开数据
![]()
点击后会在屏幕上出现一行命令,可以将其复制到do文件中,便于下次使用![]()
例如:我们最关心的两个变量一个是收入,一个是主观幸福感,我们可以先查看一下变量的基本情况
tab a36
![]()
sum a8a
![]()
熟悉stata或者是量化研究处理流程的读者可能清楚,跑一个模型可能在这一步需要花费很大的力气,在这里我们将详细地来进行操作示范*几个常用命令:gen recode rename replace社会科学的研究中基本人口学变量是必不可少的,本部分的命令也可以复制到以后的其他研究中使用,事半功倍!
gen gender=a2 //生成一个新变量gender,gender这个变量就是原来的a2变量gen age=2015-a301 //生成一个新变量age,这个变量为2015减去出生年replace nation=. if nation<0 //在stata中用.或者空格来表示缺失值,这样软件就能识别出,否则将会代入计算recode nation (1=1 "汉族")(else=0 "少数民族"),gen(newnation)recode edu(1 2 3=1 "小学及以下")(4=2 "初中")(5 6 7 8=3 "高中(专)")(else=4 "大专及以上"),gen(newedu)replace party=1 if a10==4recode hukou (1=0 "农业户口")(7=. )(else=1 "非农户口"),gen(urban) //将没有户口处理为缺失值
global population gender age newnation newedu party urban/*定义全局宏,用处就是将上述所有人口学变量定义为population,在接下来的回归时就不需要每个变量都敲一遍,通过输入$population就可以*/
*我们的研究问题是:钱能不能买来快乐?我们用个人全年总收入测量“钱”,相关处理如下:
replace income=. if income<0 /*在回归分析中有一个重要的假定,就是变量要服从正态分布,我们可以通过直方图的形式 hist income, percent normal title("收入分布") /*做完图之后我们发现,收入这个变量呈现明显的左偏的分布态势,根据统计学原理, 针对左偏的变量我们一般采用取对数的形式来纠正,命令如下:*/ gen lnincome=log(income+1) /*生成收入对数变量,选择收入+1的原因是,对数运算的数学原理中不允许出现0,而收入 变量中有0值,为了让这些0收入的样本进入,我们将其+1,这也不会对最后的结果产生较大影响*/ hist lnincome, percent normal title("收入对数分布") //调整之后收入对数是符合正态分布的
*我们的研究问题是:钱能不能买来快乐?我们用主观幸福感测量“快乐”,相关处理如下:
replace happy=. if happy<0在研究中除了要控制基本的人口学变量之外,还要控制一些混杂因素,正常情况下,控制变量的选择要依照理论,这里仅为了方法上的展示,我们拟控制如下变量:个人能力和社会阶层这两个变量
/*我们拟采用CGSS问卷中的:您觉得自己的以下能力是什么水平?(问卷P11)进行测量主要包括四个方面:听普通话、说普通话、听英语、说英语等能力,对于这四个题目我们可以通过一个循环命令来解决,不需要繁琐的写很多命令,具体如下:*/另外的一个问题,如果我们把这四个问题都放入模型会产生严重的多重共线性问题,为了避免这一问题,我们可以用因子分析的方法解决,具体如下:rename f1 ability //将f1这个因子得分变量重命名为ability
replace class=. if class<0
reg happy lnincome //reg是线性回归的命令,后面第一个变量是因变量,其余顺序无要求reg happy lnincome $population $var //人口学变量和控制变量均利用全局宏简写ologit happy income //ologit是序次logistic回归的命令,后面第一个变量是因变量,其余顺序无要求ologit happy income $population $var可以看出,回归分析只是一行命令而已,真正的工作是在第三步:数据/变量管理中
经过一些列的数据分析后,到底如何将结果变成可以直接贴在论文的图表呢?在这里介绍几个命令,可以将描述性统计以及回归分析的表格直接输入到word中。ssc install asdoc, replace //安装外部命令,用于表格输出asdoc sum income lnincome happy $population $var, /// stat(N mean sd p25 p75) fs(12) dec(2) ///stat(N mean sd p25 p75) 表示输出的统计变量为样本数、算术平均数、标准差、t 值、1% 分位数、99% 分位数,fs(#) 为 Font size 的缩写,表示字号大小为 # 镑,dec(#) 为 Decimal points 的缩写,表示输出结果保留到小数点后 # 位ssc install sum2docx,replace
sum2docx income lnincome happy $population $var /// using table1.docx,append obs mean(%9.2f) /// sd min(%9.0g) median(%9.0g) max(%9.0g) ///ssc install outreg2,replace //安装外部命令,用于表格输出
reg happy lnincome $population $var outreg2 [m1 m2] using "d:\", excel dec(3) alpha(0.001, 0.01, 0.05)/*将m1和m2共同输出到表格中,保存到d盘,dec(3)指保留三位小数,alpaha()指显著性水平*/reg happy lnincome $population $var esttab m1 m2 using result.rtf,se r2 mtitle star(+ 0.1 * 0.05 ** 0.01)
/*m1和m2共同输出到表格中,输出包括标准误,r平方,和显著性水平,保存位置为当前cd的位置*/![]()