第一章 Stata 概貌
§1.1 Stata的功能、特点和背景
Stata
是一个用于分析和管理数据的功能强大又小巧玲珑的实用统计分析软件,由美国计算机资源中心(Computer Resource Center)研制。从1985至1998的十四年时间里,已连续推出1.1,1.2,1.3,1.4,1.5,……及2.0,2.1,3.0,3.1,4.0,5.0,6.0等多个版本,通过不断更新和扩充,内容日趋完善。它同时具有数据管理软件、统计分析软件、绘图软件、矩阵计算软件和程序语言的特点,又在许多方面别具一格。Stata融汇了上述程序的优点,克服了各自的缺点,使其功能更加强大,操作更加灵活、简单,易学易用,越来越受到人们的重视和欢迎。Stata
的突出特点是只占用很少的磁盘空间,输出结果简洁,所选方法先进,内容较齐全,制作的图形十分精美,可直接被图形处理软件或字处理软件如WORD等直接调用。一、 Stata的数据管理能力
Stata
可以将分组变量转换成指示变量
可以对数据文件进行横向和纵向链接,可以将行数据转为列数据,或反之。
可以恢复、修改执行过的命令。
可以利用数值函数或字符串函数产生新变量。
可以从键盘或磁盘读入数据。
二、 Stata的统计功能
Stata
的统计功能很强,除了传统的统计分析方法外,还收集了近20年发展起来的新方法,如Cox比例风险回归,指数与Weibull回归,多类结果与有序结果的logistic回归,Poisson回归、负二项回归及广义负二项回归,随机效应模型等。具体说,Stata具有如下统计分析能力:数值变量资料的一般分析:参数估计,t检验,单因素和多因素的方差分析,协方差分析,交互效应模型,平衡和非平衡设计,嵌套设计,随机效应,多个均数的两两比较,缺项数据的处理,方差齐性检验,正态性检验,变量变换等。
分类资料的一般分析:参数估计,列联表分析
相关与回归分析:简单相关,偏相关,典型相关,以及多达数十种的回归分析方法,如多元线性回归,逐步回归,加权回归,稳键回归,二阶段回归,百分位数
危险度分析:条件和非条件的
生存分析:基线生存曲线的估计、相对危险度的估计,
其它方法:质量控制,整群抽样的设计效率,诊断试验评价,
三、 Stata的作图功能
Stata的作图模块,主要提供如下八种基本图形的制作: 直方图(histogram),条形图(bar), 百分条图(oneway),百分圆图(pie),散点图(twoway),散点图矩阵(matrix),星形图(star),分位数图。这些图形的巧妙应用,可以满足绝大多数用户的统计作图要求。在有些非绘图命令中,也提供了专门绘制某种图形的功能,如在生存分析中,提供了绘制生存曲线图,回归分析中提供了残差图等。详见第五章。
四、 Stata的矩阵运算功能
矩阵代数是多元统计分析的重要工具,
Stata提供了多元统计分析中所需的矩阵基本运算,如矩阵的加、积、逆、Cholesky 分解、Kronecker内积等;还提供了一些高级运算,如特征根、特征向量、奇异值分解等;在执行完某些统计分析命令后,还提供了一些系统矩阵,如估计系数向量、估计系数的协方差矩阵等。尽管
Stata的容量最大只容许400? 400的矩阵(默认为40? 40),用它来完成日常工作中的统计分析显然不现实,但用它来做一些练习,提高多元统计分析的教学效率,无疑是很有帮助。详见第十八章。五、 Stata的程序设计功能
Stata
是一个统计分析软件,但它也具有很强的程序语言功能,这给用户提供了一个广阔的开发应用的天地,用户可以充分发挥自己的聪明才智,熟练应用各种技巧,真正做到随心所欲。事实上,Stata的ado文件(高级统计部分)都是用Stata自己的语言编写的。下面这段程序是笔者自行编写的,用于产生n个参数为? 的Poisson分布的随机数。prog define rp |
/* 定义程序名 |
set obs `2’ |
/* 定义数据库的最大记录数 |
set seed `3’ |
/* 设置随机数种子, |
gen rp=. |
/* 定义变量rp,用于存放Poisson分布随机数 |
local lamda0=exp(`1’) |
/* 计算lamda0=exp(? ) |
local j=1 |
/* j=1 |
while `j’ <`2’+1 { |
/* 对 j |
local i=1 |
/* i=1 |
local r0=1 |
/* r0=1 |
while `i’ >0 { |
/* i 循环 |
local r1=uniform() |
/* r1= 均匀分布的随机数 |
local r0=`r1’*`r0’ |
/* r0=r1*t0 |
if `r0’ < `lamda0’{ |
/* 如果 r0 |
local n0= `i’-1 |
/* n0= i-1 |
local i=-1 |
/* i=-1 |
} |
|
local i= `i’+1 |
/* i 循环 |
} |
|
quiet replace rp=`n0’if _n==`j’ |
/* 第j个rp=n0 |
local j= `j’+1 |
/* j 循环 |
} |
|
end |
|
§1.2 Stata的界面
Windows版本的Stata的界面上有一级菜单行,二级菜单窗口,命令窗口,结果窗口,图形窗口,变量名窗口,已执行过的命令窗口,帮助窗口等。窗口的大小、位置可根据用户需要进行调整。
§1.3 进入和退出Stata
一、 DOS版本的Stata的进入和退出
前已述及,要将Stata程序所在的路径放入autoexec.bat中,我们可在DOS下任何目录位置进入Stata,但我们假定d:\盘上进行。
D:\>Stata
进入Stata后,屏幕显示Stata的版本号,公司所在地等信息,Dos版本下的Stata即出现圆点提示符。这时即可键入Stata的各种命令。
若已在Stata状态读入了数据,并且已将数据按Stata指令存盘,或读入的数据虽经分析,但对数据及数据结构等未作任何修改,则只须键入:
. exit
即可退出Stata。
如未将数据按Stata指令存盘,或读入的数据或数据结构已被修改(Stata的有些命令会自动修改数据结构,如按某变量排序等),这时,Stata将拒绝退出Stata状态。若确实不需要存盘而退出Stata,可键入:
. e
,clear(e
为exit的简写)即可强行退出Stata。或分两步,即先放弃所有数据,.drop _all
再退出
Stata,. exit
二、 WINDOWS版本的Stata的进入和退出
在桌面上双击Wstata的图标:
即可进入
Stata,并出现命令窗口。在
Stata的菜单中选 File ,再选 exit ,如数据已经存盘,则可退出Stata。如数据未存盘,则Stata给出如下提示:“Data has changed without being saved. Do you really want to exit?”(数据已改变,但未存盘,是否真的要退出?)如要退出,则按 确定 ,否则按 取消 。将数据存盘后再退出。在
WINDOWS下,亦可用DOS的命令退出Stata。§1.4 Stata的数据输入与储存
Stata
可以从键盘输入数据,也可以从文件读入数据。WINDOWS下的Stata还可以用Stata的数据编辑器输入、修改和管理数据。这里简单介绍如何从键盘输入数据,有关更详细的数据读入方式将在第三章中讲述。一、 从键盘输入数据
例
1.1 某实验得到如下数据
x |
1 |
2 |
3 |
4 |
5 |
y |
4 |
5.5 |
6.2 |
7.7 |
8.5 |
进入
Stata后,操作过程如下,其中划线部分为操作者输入部分。. input x y
x y
1. 1 4
2. 2 5.5
3. 3 6.2
4. 4 7.7
5. 5 8.5
6. end
用list命令可以看到输入的数据。
. list
x y
1. 1 4
2. 2 5.5
3. 3 6.2
4. 4 7.7
5. 5 8.5
二、 保存数据
为了方便以后应用,输入
Stata的数据应存盘。如欲将上述数据存入d:\mydata\子目录中,文件名为ex1.dta,命令为:. save d:\mydata\ex1
file d:\temp\ex1replace.dta saved
该指令在
d:盘的mydata子目录中建立了一个名为“ex1.dta”的Stata格式的数据文件。后缀dta是Stata内定的数据格式文件。该格式文件只能在Stata中用use命令打开:. use d:\mydata\ex1
如目标盘及子目录中已有相同文件名的文件存在,则该命令将给出如下信息:
file d:\ mydata\ex1.dta already exists,告诉用户在该目标盘及子目录中已有相同的文件名存在。如欲覆盖已有文件,则加选择项replace。命令及结果如下:. save d:\mydata\ex1 , replace
file d:\temp\ex1.dta saved
这样,
Stata在d:盘的mydata子目录中建立了一个名为“ex1.dta”的Stata格式数据文件,并替换了原有文件。§1.5 Stata的结果文件
Stata在屏幕上显示的运行结果有两种,一种是纯字符型的(如方差分析结果,回归分析结果等),一种是图形。
若要将操作过程和纯字符型结果记录下来,需事先打开一个
log文件:.log using 文件名
设结果文件名为
result1,则Stata自动加上后缀“.log”,亦可由用户自己加上其他后缀。执行该指令后的所有操作指令和文字结果(除help下显示的结果)将记录在结果文件“result1.log”中。若执行某一指令后的结果没有必要记录下来,则可事先用指令“log off”暂停记录,需要记录时再用“log on”继续记录,最后用“log close”关闭文件。如果结果文件“
result1.log”已经存在,用“log using result1”不能打开已有文件result1. log。如要覆盖文件result1.log,则加选择项replace。即键入:. log using result1, replace
如要在其后进行添加,则键入:
. log using result1, append
文件“
result1.log”可在EDIT、PE2、WPS或WORD等字处理软件下编辑、打印,也可在DOS下用type或print命令通过显示器浏览或打印机输出硬拷贝。若要将图形结果打印下来,需要在绘图指令中加上“
saving”选择项。例如,画例1.1中x与y的散点图并存入文件“ex1.gph”,可用下述指令:.graph y x ,c(l) saving(d:\mydata\ex1)
这时屏幕上显示
y与x的散点图,并将被存入d:\mydata\子目录中,文件名为“ex1.gph”(gph是Stata内定的图形文件后缀,用户亦可自己定义后缀名)。该图形可在Stata状态用“ graph using d:\mydata\ex1”重新显示在屏幕上,可在 File 的 Print Graph 打印,也可用打印命令“gphdot”打印。DOS
版本的Stata可在DOS提示符下用“gphdot” 命令打印:D:\MYDATA>gphdot ex1.gph
更详细的内容见第五章。
§1.6 Stata的操作方式
Stata的操作有交互式操作和非交互式操作两种形式。
一、 交互式操作
在
Stata状态直接键入指令,每输入一个指令,Stata执行一个,这种方式称为交互式操作。例
1.2 用例1.1数据建立回归方程。.use ex1
.reg y x
二、 非交互式操作
若分析内容很多,有时甚至涉及到多个数据库,有几十个甚至成百个分析内容,若仍采取交互式操作,不仅要将许多时间花在等待运算结果上,而且容易漏掉一些主要的分析内容或做一些无益的重复劳动。这时最好在EDIT,PE2,WORD等文字处理下将这些指令写入一个以“do”为扩展名的命令文件(文本格式,即ASCII码),并仔细核对分析内容、命令格式,直至组织数据文件的合理性等,修改好后再在Stata状态执行该命令文件。
例
1.3 用非交互式操作对例1.1数据进行相关和回归分析。第一步,在字处理软件下写入如下指令,并以文件名“ex1.do”存入磁盘d:\mydata\子目录中。
set more 1 |
/* 指定结果窗口中,当输出结果满一屏后,不再显示--more--,直接显示下一屏 |
log using d:\mydata\ex1.log |
/* 打开结果文件ex1.log |
use d:\mydata\ex1.dta |
/* 调用数据文件d:\mydata\ex1.dta |
gra y x,saving(d:\mydtata\ex1) |
/* 作y与x的散点图,并存入d:\mydtata\ex1.gph |
cor y x |
/* 作y与x的相关 |
reg y x |
/* 作y与x的回归 |
log close |
/* 关闭结果文件ex1.log |
set more 0 |
/* 指定结果窗口中,当输出结果满一屏后,显示-- more--,直到按任意键后,再显示下一屏 |
第二步,在
Stata状态键入:.do d:\mydtata\ex1.do
Stata
将首先打开一个名为“ex1.log”的结果文件,然后打开数据文件“ex1.dta”,画散点图并将图形存入文件“ex1.gph”,进行相关分析、回归分析,最后关闭结果文件。此时,Stata执行这些命令是自动的,不间断的。§1.7 Stata的帮助功能
Stata
具有很强的帮助功能。帮助功能的使用有两种方式。一是在
Stata状态,需要了解某个指令的格式和功能,这时只需键入help(或按功能键F1),然后空一格键入该指令即可。例如,若需了解回归分析的指令格式,则:. help regress
则可得到帮助。
二是利用菜单,在Stata的菜单上按 Help ,出现帮助窗口。
此时输入需要帮助的命令关键词,如regress,按 OK 即可得到帮助。
如需了解Stata的全部命令,可键入help contents,可得到Stata的全部命令及其简单解释;或在帮助窗口按 Contents ,则出现如下的帮助内容窗口。
在知道所要帮助的命令时,在命令窗口键入help加命令,即可获得帮助;在不知道所要帮助的命令时,用菜单操作更好。Stata的常用命令见附录。
下面以多元线性回归命令为例,介绍Stata的命令的格式。多元线性回归命令为regress,欲得到命令格式,键入help regress即可得到:
[by varlist:] regress [depvar [varlist1 [(varlist2)]]]
[weight] [if exp] [in range] [, level(#)
beta hascons noconstant noheader eform(string)
depname(varname) mse1 ]
命令中,[ ]内为选择项,括号外为必选项。
这里介绍命令的公共选择部分,该命令的专用选择项将在相应章节作介绍。
. sort group
if group==1 /* 对满足group=1条件的观察值进行分析
if group>2 /* 对满足group>2条件的观察值进行分析
if group==1 | group==2 /* 对满足group=1或group=2条件的观察值进行分析
if group~=3 /* 对满足group不等于3条件的观察值进行分析
if group==1 & sex==0 /* 对满足group=1,同时sex=0条件的观察值进行分析
in 1/25 /* 对观察值范围为1~25号的观察值作分析
in 26/44 /* 对观察值范围为26~44号的观察值作分析
in 26/l /* 对观察值范围为26~最后(last)的观察值作分析
in 5/l /* 对最后5个观察值进行分析
这些公共选择项在很多命令中都可选用,本书在介绍各命令时将省去这些公共选择项。
另外一个选择项,也可用于很多命令,它就是
for。例如,在作回归分析时,自变量为x1,x2,…,x22共22变量,而因变量有y1,y2,…,y10,z1,…,z5共15个变量。欲分别建立每个因变量yi和zi与x1,x2,…,x22的回归,则需要写15个命令。而用for选择项只需一个命令即可:for y1-y10 z1-z5 : regress @ x1-x22
命令中,
for 后面的变量是选定的,regress是作回归分析,@是替换符,Stata自动用for语句指定的变量逐一替换作为因变量,而自变量为x1-x22。又如,
for y* : summ @,detail
表示,对以
y字母开始的变量作详细的统计描述。(陈 峰)