前言

stata整理表格的时候功能还是挺强大的,前阵子小白安装了个stata15.1并正在运用这款生命力顽强的(stata:喵喵喵??)统计软件解决一些问题,学习并不系统,基本是用到什么就百度什么(哎,工具书没在手边)……emmm……可能一些命令并不是最佳方案,可能有点傻……emmm……anyway,记录,记录下来(主要是方便本人回顾)……

1) drop、keep删除样本与变量

drop用来删去样本(删除行),下例删除country为5/6/8的三个国家的样本数据。

drop if country== 5
drop if country== 6
drop if country== 8

drop用来删去变量(删除列),下例删除country这一变量。

drop country

keep用来保留变量,下例值保留原数据中的country idnumber q4 q23 q24 q25 q26 q2等变量,除此以外的删除。

keep country idnumber q4 q23 q24 q25 q26 q2

删完数据别忘了保存。

2) coldiag2共线性诊断

coldiag2是一个stata中常用作共线性诊断的外部命令,需要自己安装,安装命令:

ssc install coldiag2, replace

下例对price mpg headroom trunk weight length等变量的共线性针对

coldiag2 price mpg headroom trunk weight length

看条件系数大小判断有无共线性,即当“Condition number using scaled variables” 大于30表明可能存在共线性问题。一篇以条件系数30作为标准的学术论文(Yang et al., 2011)

3) reg2docx 输出回归分析结果到表格

需要自己安装,安装命令:

ssc install reg2docx

下例建立四个回归分析模型放到一个表格中,并存到My_Table_nomal.docx内。

*建立一个word来存放表格//新建 Word 文档//段落居中
putdocx begin       
putdocx paragraph, halign(center)

*-定义字体、大小等基本设置
putdocx text ("附:调节效应-层级回归"), font("华为楷体",16,black) bold linebreak  
        
*-保存名为 My_Table.docx 的 Word 文档 
putdocx save "My_Table_nomal.docx", replace 

*====================================
*另起一页,将内容追加到My_Table.docx 的 Word 文档中
putdocx begin
putdocx pagebreak
putdocx save "My_Table_nomal.docx", append
*====================================

*开始回归模型

*====================================
*建立回归模型1,保存回归模型1
reg cpcx $xlist gjc xqc
est store m1
*建立回归模型2,保存回归模型2
reg cpcx $xlist gjc xqc c.gjc##c.xqc
est store m2
*建立回归模型3,保存回归模型3
reg cpcx $xlist hjc xqc
est store m3
*建立回归模型4,保存回归模型4
reg cpcx $xlist hjc xqc c.hjc##c.xqc
est store m4
*输出表格
reg2docx m1 m2 m3 m4 using "My_Table_nomal.docx", append scalars(N r2(%9.3f) r2_a(%9.3f)) title("表1: 创新的影响效应") mtitles( "模型1.1" "模型1.2" "模型1.3" "模型1.4")

打开My_Table_nomal.docx即可看到整理好的表格。

4) recode数据重新编码

recode可以将数据重新赋值,下例中将q4变量中的-1、7、8、9全部改为999,生成一个新的变量q4_new来存放新数据,此后使用q4_new即可,这样可以保留原来的数据,可方便以后使用。

recode q4 (-1 = 999)(7 = 999)(8 = 999)(9 = 999), gen(q4_new)

下例将se3a变量中的-1该为. (在stata中缺失值常常用 .表示,这样在求均值时不会被计入),然后新数据存放在age这个新变量中。

recode se3a (-1 = .), gen(age)

删完数据别忘了保存数据。

5) 缺失值的均值插补

下例对q25这一变量的均值插补缺失值,过程是:先生成一列数据,其值为q25的均值q25_n_mean,然*后用q25_n_mean替代q25中为 . 的数值。

egen q25_n_mean = mean(q25_n)
replace q25_n=q25_n_mean if q25_n==.

6) gen生成均值新变量

在测量问卷数据处理中常常需要由几个变量就均值,并生成一个新的均值变量待使用。下例为生成一个新变量JCTJ这个变量由B6/B8/B9/B10等4个变量就均值得到。

gen JCTJ = (b6+b8+b9+b10)/4

7) center变量中心化

数据处理时会遇到需要将变量中心化的情况(中介效应检验时常用),有一个很方便的外部命令,center,安装命令:

ssc install center

下例是对ZZFW FLKJ WBYL三个变量都做中心化处理,运行结束后会自动生成三个新变量,分别为c_ZZFW c_FLKJ c_WBYL。

center ZZFW FLKJ WBYL

8) corr2docx输出相关系数表格

corr2docx是一个外部命令,需要安装,安装命令如下:

ssc install corr2docx, replace

下例计算6个变量之间的相关系数,放到一个表格中,并存到pearson.docx内。

*打开数据
use "F:\data.dta", clear

*建立文档
putdocx begin       
putdocx paragraph, halign(center)
*-定义字体、大小等基本设置
putdocx text ("附:相关分析表"), font("华为楷体",16,black) bold linebreak  
*-保存名为 pearson.docx 的 Word 文档 
putdocx save "pearson.docx", replace
corr2docx gjc xqc hjc cpcx jfcx qyjx using pearson.docx, append star(* 0.1 ** 0.05 *** 0.01)

9) alpha计算信度(内部一致性系数、Cronbach alpha值)

下例计算c1 c2 c3三个题目用于测量因子A的信度情况

alpha c1 c2 c3

10) summarize 输出描述性统计信息

sum可以输出样本数、均值、标准差、最大值、最小值、加detail还可以输出更相信的信息四分位数、峰度、偏度等
下例输出msq的详细描述信息,同时输出MSQ18 MSQ19 MSQ20三个观察值的样本数、均值、标准差、最大值、最小值

summarize msq, detail
sum MSQ18 MSQ19 MSQ20

11) ttable2 均值比较

ttable2可对多个变量进行组间均值差异检验,它是一个外部命令,需要安装,安装命令如下:

ssc install ttable2, replace

下例以chwinevd_7为分组变量,对MSQindividual的均值差异做比较,gender为二值的分组:

ttable2 MSQindividual , by(gender)

当有两个以上的分组时,运用ttable2 需要做两两比较。下例以race为分组,比较MSQindividual均值,race为三分的值:

ttable2 MSQindividual if race==1 | race==2, by(race)
ttable2 MSQindividual if race==1 | race==3, by(race)

另外,更多均值比较检验的参考资料可参考:Stata:多个变量组间均值\中位数差异检验

12) tabulate 生成分类变量的交叉表、进行卡方检验

下列建立工作时长worktime(分类变量)与工作经历experience(分类变量)的交叉表,并输出卡方检验的P值:

tabulate worktime experience, chi2

13) replace 实现按年龄分组

简单粗暴,下列按人群的年龄age每5年做一个时段进行分组并赋值,首先新建一个叫agefenzu的变量,然后根据age的不同情况对agefenzu赋值:

gen agefenzu = .
replace agefenzu = 1 if age>=19&age<=25
replace agefenzu = 2 if age>=26&age<=30
replace agefenzu = 3 if age>=31&age<=35
replace agefenzu = 4 if age>=36&age<=40
replace agefenzu = 5 if age>=41&age<=45
replace agefenzu = 6 if age>=46&age<=50
replace agefenzu = 7 if age>=51&age<=55

14) gen 生成ID号

有的时候数据库不一定有ID,当有几万条数据,想给它们从1开始编号,这个在excel中很好实现,在stata中可以用以下命令:

gen id = _n

15) order 实现变量的列移动

1、接上一条,生成了一列数据,变量名为id,希望把它移到数据表格的第一列,可以用order命令:

order id

2、如果只是希望把变量移到特定列,依然可以用order命令,以下命令将变量weight移到变量price的前一列:

order weight, before(price)

16) scatter画散点图、twoway画散点图并添加趋势线

1、普通散点图

scatter y x

2、带趋势线的散点图

twoway (scatter y x) (lfit y x)

3、当趋势线为曲线时

twoway (scatter y x) (qfit y x)