分享

数据管理的Stata程序功夫秘籍

 张春强2022 2018-03-31


数据管理等计量方法的操作典籍,有需要do文件的进入计量经济圈社群直接提取,我们会成立Stata软件交流小组,欢迎进群里互相研讨。

////数据管理从这里开始///

**调整变量格式:
format x1 %10.3f  //将x1的列宽固定为10,小数点后取三位
format x1 %10.3g  //将x1的列宽固定为10,有效数字取三位
format x1 %10.3e  //将x1的列宽固定为10,采用科学计数法
format x1 %10.3fc  //将x1的列宽固定为10,小数点后取三位,加入千分位分隔符
format x1 %10.3gc  //将x1的列宽固定为10,有效数字取三位,加入千分位分隔符
format x1 %-10.3gc  //将x1的列宽固定为10,有效数字取三位,加入千分位分隔符,加入“-”表示左对齐


**对样本进行随机筛选:
sample 50  //在观测案例中随机选取50%的样本,其余删除
sample 50,count  //在观测案例中随机选取50个样本,其余删除


**查看与编辑数据:
browse x1 x2 if x3>3 //按所列变量与条件打开数据查看器
edit x1 x2 if x3>3 //按所列变量与条件打开数据编辑器


**简单统计量的计----------------------------------------------------------
ameans x //计算变量x的算术平均值、几何平均值和简单调和平均值,均显示样本量和置信区间
mean var1 [pweight = var2] //求取分组数据的平均值和标准误,var1为各组的赋值,var2为每组的频数
summarize y x1 x2,detail //可以获得各个变量的百分比数、最大最小值、样本量、平均数、标准差、方差、峰度、偏度

summarize var1 [aweight = var2], detail //求取分组数据的统计量,var1为各组的赋值,var2为每组的频数
tabstat X1,stats(mean n q max min sd var cv //计算变量X1的算术平均值、样本量、四分位线、最大最小值、标准差、方差和变异系数



**概率分布的计算:
**贝努利概率分布测试:
webuse quick
bitest quick==0.3,detail //假设每次得到成功案例‘1’的概率等于0.3,计算在变量quick所显示的二项分布情况下,各种累计概率和单个概率是多少
bitesti 10,3,0.5,detail //计算当每次成功的概率为0.5时,十次抽样中抽到三次成功案例的概率:低于或高于三次成功的累计概率和恰好三次成功概率


**泊松分布概率:
display poisson(7,6) //计算均值为7,成功案例小于等于6个的泊松概率
display poissonp(7,6) //计算均值为7,成功案例恰好等于6个的泊松概率
display poissontail(7,6) //计算均值为7,成功案例大于等于6个的泊松概率


**超几何分布概率:
display hypergeometricp(10,3,4,2) //计算在样本总量为10,成功案例为3的样本总体中,不重置地抽取4个样本,其中恰好有2个为成功案例的概率
display hypergeometric(10,3,4,2) //计算在样本总量为10,成功案例为3的样本总体中,不重置地抽取4个样本,其中有小于或等于2个为成功案例的概率


**检验极端值的步骤--------------------------------

**常见命令:tabulate、stem、codebook、summarize、list、histogram、graph box、gragh matrix

**第一步,用codebook、summarize、histogram、graph boxs、graph matrix、stem看检验数据的总体情况:
codebook y x1 x2
summarize y x1 x2,detail
histogram x1,norm //正态直方图
graph box x1 //箱图
graph matrix y x1 x2,half //画出各个变量的两两x-y图
stem x1 //做x1的茎叶图
 
**第二部,用tabulate、list细致寻找极端值
tabulate code if x1==极端值 //作出x1等于极端值时code的频数分布表,code表示地区、年份等序列变量,这样便可找出那些地区的数值出现了错误
list code if x1==极端值 //直接列出x1等于极端值时code的值,当x1的错误过多时,不建议使用该命令
list in -20/l //l表示last one,-20表示倒数第20个样本,该命令列出了从倒数第20个到倒数第一个样本的各变量值

**第三部,用replace命令替换极端值
replace x1=? if x1==极端值
 
keep if y<1000>
drop if y>1000 //去除极端值
 
**数据排序-----------------------------------
sort x //对数据排序
gsort +x //对数据按x进行升序排列
gsort -x  //对数据按x进行降序排列
gsort -x, generate(id) mfirst //对数据按x进行降序排列,缺失值排最前,生成反映位次的变量id 
order y x3 x1 x2 //将变量按照y、x3、x1、x2的顺序排列


**生成新变量----------------------------------
gen logx1=log(x1) //得出x1的对数
gen x1=exp(logx1) //将logx1反对数化
gen r61_100=1 if rank>=61&rank<=100 若rank在61与100之间,则新变量r61_100的取值为1,其他为缺失值="">
replace r61_100 if r61_100!=1 //“!=”表示不等于,若r61_100取值不为1,则将r61_100替换为0,就是将上式中的缺失值替换为0
gen abs(x) //取x的绝对值
gen ceil(x) //取大于或等于x的最小整数
gen trunc(x) //取x的整数部分
gen round(x) //对x进行四舍五入
gen round(x,y) //以y为单位,对x进行四舍五入
gen sqrt(x) //取x的平方根
gen mod(x,y) //取x/y的余数
gen reldif(x,y) //取x与y的相对差异,即|x-y|/(|y|+1)
gen logit(x) //取ln[x/(1-x)]
gen x=autocode(x,n,xmin,xmax) //将x的值域,即xmax-xmin,分为等距的n份
gen x=cond(x1>x2,x1,x2) //若x1>x2成立,则取x1,若x1>x2不成立,则取x2
sort x
gen gx=group(n) //将经过排序的变量x分为尽量等规模的n个组
egen zx1=std(x1) //得出x1的标准值,就是用(x1-avgx1)/sdx1
egen zx1=std(x1),m(0) s(1) //得出x1的标准分,标准分的平均值为0,标准差为1
egen sdx1=sd(x1) //得出x1的标准差
egen meanx1=mean(x1) //得出x1的平均值
egen maxx1=max(x1) //最大值
egen minx1=min(x1) //最小值
egen medx1=med(x1) //中数
egen modex1=mode(x1) //众数
egen totalx1=total(x1) //得出x1的总数
egen rowsd=sd(x1 x2 x3) //得出x1、x2和x3联合的标准差
egen rowmean=mean(x1 x2 x3) //得出x1、x2和x3联合的平均值
egen rowmax=max(x1 x2 x3) //联合最大值
egen rowmin=min(x1 x2 x3) //联合最小值
egen rowmed=med(x1 x2 x3) //联合中数
egen rowmode=mode(x1 x2 x3) //联合众数
egen rowtotal=total(x1 x2 x3) //联合总数
egen xrank=rank(x) //在不改变变量x各个值排序的情况下,获得反映x值大小排序的xrank


**数据计算器display命令---------------------------
display x[12] //显示x的第十二个观察值
display chi2(n,x) //自由度为n的累计卡方分布
display chi2tail(n,x) //自由度为n的反向累计卡方分布,chi2tail(n,x)=1-chi2(n,x)
display invchi2(n,p) //卡方分布的逆运算,若chi2(n,x)=p,那么invchi2(n,p)=x
display invchi2tail(n,p) //chi2tail的逆运算
display F(n1,n2,f) //分子、分母自由度分别为n1和n2的累计F分布
display Ftail(n1,n2,f) //分子、分母自由度分别为n1和n2的反向累计F分布
display invF(n1,n2,P) //F分布的逆运算,若F(n1,n2,f)=p,那么invF(n1,n2,p)=f
display invFtail(n1,n2,p) //Ftail的逆运算
display tden(n,t) //自由度为n的t分布
display ttail(n,t) //自由度为n的反向累计t分布
display invttail(n,p) //ttail的逆运算


**给数据库和变量做标记-----------------------------
label data '~~~' //对现用的数据库做标记,'~~~'就是标记,可自行填写
label variable x '~~~' //对变量x做标记
label values x label1 //赋予变量x一组标签:label1
label define label1 1 'a1' 2 'a2' //定义标签的具体内容:当x=1时,标记为a1,当x=2时,标记为a2


**频数表-----------------------------------
tabulate x1,sort
tab1 x1-x7,sort //做x1到x7的频数表,并按照频数以降序显示行
table c1,c(n x1 mean x1 sd x1)//在分类变量c1的不同水平上列出x1的样本量和平均值


**二维交互表------------------------------
webuse auto
table rep78 foreign, c(n mpg mean mpg sd mpg median mpg) center row col  //rep78,foreign均为分类变量,rep78为行变量,foreign为列变量,center表示结果显示在单元格中间,row表示计算行变量整体的统计量,col表示计算列变量整体的统计量
tabulate x1 x2,all  //做x1和x2的二维交互表,要求显示独立性检验chi2、似然比卡方独立性检验lrchi2、对定序变量适用的等级相关系数gamma和taub、以及对名义变量适用的V
tabulate x1 x2,column chi2 //做x1和x2的二维交互表,要求显示列百分比和行变量和列变量的独立性检验——零假设为变量之间独立无统计关系
tab2 x1-x7,all nofreq //对x1到x7这七个变量两两地做二维交互表,不显示频数:nofreq


**三维交互表----------------------------------------
by x3,sort:tabulate x1 x2,nofreq col chi2 //同时进行x3的每一个取值内的x1和x2的二维交互表,不显示频数、显示列百分比和独立性检验

**四维交互表-----------------------------------------
table x1 x2 x3,c(ferq mean x1 mean x2 mean x3) by(x4)
tabstat X1 X2,by(X3) stats(mean n q max min sd var cv) col(stats)
tabstat X1 X2,by(X3) stats(mean range q sd var cv p5 p95 median),[aw=X4] //以X4为权重求X1、X2的均值,标准差、方差等

ttest X1=1
count if X1==0
count if X1>=0
gen X2=1 if X1>=0
corr x1 x2 x3 //做x1、x2、x3的相关系数表
swilk x1 x2 x3 //用Shapiro-Wilk W test对x1、x2、x3进行正太性分析
sktest x1 x2 x3 //对x1、x2、x3进行正太性分析,可以求出峰度和偏度
ttest x1=x2 //对x1、x2的均值是否相等进行T检验
ttest x1,by(x2) unequal //按x2的分组方式对x1进行T检验,假设方差不齐性
sdtest x1=x2 //方差齐性检验
sdtest x1,by(x2) //按x2的分组方式对x1进行方差齐性检验


**聚类分析-----------------------------------------------
cluster kmeans y x1 x2 x3, k(3) //依据y、x1、x2、x3,将样本分为n类,聚类的核为随机选取
cluster kmeans y x1 x2 x3, k(3) measure(L1) start(everykth) //'start'用于确定聚类的核,'everykth'表示将通过构造三组样本获得聚类核:构造方法为将样本id为1、1+3、1+3×2、 1+3×3……分为一组、将样本id为2、2+3、2+3×2、2+3×3……分为第二组,以此类推,将这三组的均值作为聚类的核;'measure'用 于计算相似性和相异性的方法,'L1'表示采用欧式距离的绝对值,也直接可采用欧式距离(L2)和欧式距离的平方(L2squared)。PS:这个方法 所得的结果与SPSS所得结果相同。

sort c1 c2 //对c1和c2两个分类变量排序
by c1 c2:reg y x1 x2 x3 //在c1、c2的各个水平上分别进行回归
bysort c1 c2:reg y x1 x2 x3 if c3=1 //逗号前面相当于将上面两步骤合一,既排序又回归,逗号后面的“if c3=1”表示只有在c3=1的情况下才进行回归
stepwise, pr(.2): reg y x1 x2 x3 //使用Backward selection,去除P值大于0.2时变量
stepwise, pe(.2): reg y x1 x2 x3 //使用forward selection,去除P值小于0.2时变量
stepwise, pr(.2) pe(.01):reg y x1 x2 x3 //使用backward-stepwise selection,取P值在0.01和0.2之间的变量
stepwise, pe(.2) forward: reg y x1 x2 x3 //使用forward-stepwise selection

reg y x1 x2 x3
predict Yhat,xb
predict u,resid
predict ustd,stdr //获得残差的标准误
predict std,stdp //获得y估计值的标准误
predict stdf,stdf //获得y预测值的标准误
predict e,e(1,12) //获得y在1到12之间的估计值
predict p,pr(1,12) //获得y在1到12之间的概率
predict rstu,rstudent //获得student的t值
predict lerg,leverage //获得杠杆值
predict ckd,cooksd //获得cooksd

mvreg Y1 Y2 ……: X1 X2 X3……//多元回归
mvreg y1 y2 y3: x1 x3 x3 //多元回归分析,y1 y2 y3为因变量,x1 x3 x3为自变量

test [y1] //测试对y1的回归系数联合为0
test [y1]: x1 x2 //测试对y1的回归中x1、x2的系数为0
test x1 x2 x3 //测试在所有的回归中,x1、x2、x3的系数均为0
test [y1=y2] //对y1的回归和对y2的回归系数相等
test [y1=y2]: x1 x2 x3, mtest //对y1和y2的回归中,分别测试x1、x2、x3的系数是否相等,若没有mtest这个命令,则测试他们的联和统计 
test [y1=y2=y3] //三个回归的系数是否相等,可加mtest以分别测试
test [y1=y2=y3]: x1 x2 //测试三个回归中的x1、x2是否相等,可加mtest


**est命令的用法--------------------
**储存回归结果:
reg y x1 x2 x3 //不限于reg,也可储存ivreg、mvreg、reg3
est store A
**重现回归结果:
est replay A
**对回归结果进行进一步分析:

**画图--------------------------------


茎叶图:
stem x1,line(2) //做x1的茎叶图,每一个十分位的树茎都被拆分成两段来显示,前半段为0~4,后半段为5~9
stem x1,width(2) //做x1的茎叶图,每一个十分位的树茎都被拆分成五段来显示,每个小树茎的组距为2
stem x1,round(100) //将x1除以100后再做x1的茎叶图


直方图:
histogram mpg, discrete frequency normal xlabel(1(1)5) //discrete表示变量不连续,frequency表示显示频数,normal加入正太分布曲线,xlabel设定x轴,1和5为极端值,(1)为单位
histogram price, fraction norm //fraction表示y轴显示小数,除了frequency和fraction这两个选择之外,该命令可替换为“percent”百分比,和“density”密度;未加上discrete就表示将price当作连续变量来绘图)
histogram price, percent by(foreign) //按照变量“foreign”的分类,将不同类样本的“price”绘制出来,两个图分左右排布
histogram mpg, discrete by(foreign, col(1)) //按照变量“foreign”的分类,将不同类样本的“mpg”绘制出来,两个图分上下排布
histogram mpg, discrete percent by(foreign, total) norm //按照变量“foreign”的分类,将不同类样本的“mpg”绘制出来,同时绘出样本整体的“总”直方图


二变量图:
graph twoway lfit price weight || scatter price weight //作出price和weight的回归线图——“lfit”,然后与price和weight的散点图相叠加
twoway scatter price weight,mlabel(make)  //做price和weight的散点图,并在每个点上标注“make”,即厂商的取值
twoway scatter price weight || lfit price weight,by(foreign) //按照变量foreign的分类,分别对不同类样本的price和weight做散点图和回归线图的叠加,两图呈左右分布
twoway scatter price weight || lfit price weight,by(foreign,col(1)) //按照变量foreign的分类,分别对不同类样本的price和weight做散点图和回归线图的叠加,两图呈上下分布
twoway scatter price weight [fweight= displacement],msymbol(oh) //画出price和weight的散点图,“msybol(oh)”表示每个点均为中空的圆圈,[fweight= displacement]表示每个点的大小与displacement的取值大小成比例
twoway connected y1 time,yaxis(1) || y2 time,yaxis(2) //画出y1和y2这两个变量的时间点线图,并将它们叠加在一个图中,左边“yaxis(1)”为y1的度量,右边“yaxis(2)”为y2的)
twoway line y1 time,yaxis(1) || y2 time,yaxis(2) //与上图基本相同,就是没有点,只显示曲线
graph twoway scatter var1 var4 || scatter var2 var4 || scatter var3 var4 //做三个点图的叠加
graph twoway line var1 var4 || line var2 var4 || line var3 var4 //做三个线图的叠加
graph twoway connected var1 var4 || connected var2 var4 || connected var3 var4 //叠加三个点线相连图
 
graph matrix a b c y //画出一个散点图矩阵,显示各变量之间所有可能的两两相互散点图
graph matrix a b c d,half //生成散点图矩阵,只显示下半部分的三角形区域
graph matrix price mpg weight length,half by( foreign,total col(1) ) //根据foreign变量的不同类型绘制price等四个变量的散点图矩阵,要求绘出总图,并上下排列
graph box y,over(x) yline(.22) //对应x的每一个取值构建y的箱型图,并在y轴的0.22处划一条水平线
graph bar (mean) y,over(x) //对应x的每一个取值,显示y的平均数的条形图。括号中的“mean”也可换成median、sum、sd、p25、p75等
graph bar a1 a2,over(b) stack //对应在b的每一个取值,显示a1和a2的条形图,a1和a2是叠放成一根条形柱。若不写入“stack”,则a1和a2显示为两个并排的条形柱
graph dot (median)y,over(x) //画点图,沿着水平刻度,在x的每一个取值水平所对应的y的中位数上打点
qnorm x //画出一幅分位-正态标绘图
rchart a1 a2 a2 //画出质量控制R图,显示a1到a3的取值范围

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多