stata基本命令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
stata基本命令+实例+数据+结果--必看,经典
2009-08-25 12:29
Stata 常用命令
save命令
FileSave As
例1. 表1.为某一降压药临床试验数据,试从键盘输入Stata,并保存为Stata 格式文件。
STATA数据库的维护
排序
SORT 变量名1 变量名2 ……
变量更名
rename 原变量名新变量名
STATA数据库的维护
删除变量或记录
drop x1 x2 /* 删除变量x1和x2
drop x1-x5 /* 删除数据库中介于x1和x5间的所有变量(包括x1和x5)
drop if x<0 /* 删去x1<0的所有记录
drop in 10/12 /* 删去第10~12个记录
drop if x==. /* 删去x为缺失值的所有记录
drop if x==.|y==. /* 删去x或y之一为缺失值的所有记录
drop if x==.&y==. /* 删去x和y同时为缺失值的所有记录
drop _all /* 删掉数据库中所有变量和数据
STATA的变量赋值
用generate产生新变量
generate 新变量=表达式
generate bh=_n /* 将数据库的内部编号赋给变量bh。
generate group=int((_n-1)/5)+1 /* 按当前数据库的顺序,依次产生5个1,5个2,5个3……。
直到数据库结束。
generate block=mod(_n,6) /* 按当前数据库的顺序,依次产生1,2,3,4,5,0。
generate y=log(x) if x>0 /* 产生新变量y,其值为所有x>0的对数值log(x),当x<=0时,用缺失值代替。
egen产生新变量
set obs 12
egen a=seq() /*产生1到N的自然数
egen b=seq(),b(3) /*产生一个序列,每个元素重复#次
egen c=seq(),to(4) /*产生多个序列,每个序列从1到#
egen d=seq(),f(4)t(6) /*产生多个序列,每个序列从#1到#2
encode 字符变量名,gen(新数值变量名)
作用:将字符型变量转化为数值变量。
STATA数据库的维护
保留变量或记录
keep in 10/20 /* 保留第10~20个记录,其余记录删除
keep x1-x5 /* 保留数据库中介于x1和x5间的所有变量(包括x1和
x5),其余变量删除
keep if x>0 /* 保留x>0的所有记录,其余记录删除STATA数据库的维护
替换已存在的变量值
replace 变量=表达式
replace bolck=6 if block==0 /* 将block=0的数全部替换为6。
replace z=. if z<0 /* 将所有小于0的z值用缺失值代替。
replace age = 25 in 17 /* 将第17条记录中的变量age替换为25。
for var x* : replace X=0 if X==. /* 将所有第一个字母为x的变量替换为0,如果该变量的值为缺失值
纵向连接数据库
Ex3-3.dta:
x0 x1
1. 3550 2450
2. 2000 2400
3. 3000 1800
4. 3950 3200
5. 3800 3250
use "E:\教学\上机\ex3-2.dta", clear
l
x0 x1 g
1. 2450 1450 2
2. 2100 2400 2
3. 2300 3800 2
4. 1590 4200 2
append using E:\教学\上机\ex3-3.dta
l
x0 x1 g
1. 2450 1450 2
2. 2100 2400 2
3. 2300 3800 2
4. 1590 4200 2
5. 3550 2450 .
6. 2000 2400 .
7. 3000 1800 .
8. 3950 3200 .
9. 3800 3250 .
横向联接数据库
Ex3-5.dta:
bh y0 y1 x0
1. 1 35 79.2
2
2. 3 45 47.4
8
3. 4 52 3
4.6
6
4. 6 66 28.0
9
命令
. drop _all
. use E:\教学\MPH上机\ex3-5.dta
. sort bh
. save "E:\教学\MPH上机\ex3-5.dta",replace
file E:\教学\MPH上机\ex3-5.dta saved
. use E:\教学\MPH上机\ex3-4.dta
. sort bh
. merge bh using E:\教学\MPH上机\ex3-5.dta
结果
bh x0 x1
y0 y1 _merge
1. 1 12 24 35
79.2 3
2. 2 15 26
. . 1
3. 3 16 49 45
47.4 3
4. 4 18 57 52
34.6 3
5. 5 20 68
. . 1
6. 6 9 .
66 28 2
列数据接龙
Stack 变量名,into(新变量名)|group(#) [clear wide]
示例
统计描述及区间估计
定量资料的一般描述
均数、标准差、百分位数、中位数
summarize [变量名] [, detail ]
统计描述及区间估计
百分位数
centile [变量名] [, centile(# [# ...]) cci normal meansd level(#) ]
统计描述及区间估计
定性资料的一般描述
按照分类变量给出频数和构成比
tabulate 变量名
例2. 有三组(group)患者,男女(sex)若干人,sex=1表示男性,sex=0表示女性。
测得其血红蛋白浓度(x1,%)和红细胞计数(x2,万/mm3),资料存入
c:\mydata\ex2.dta。
试对其进行描述。
见ex5-2
. use c:\mydata\ex2
. tab group
. tab sex
. tab group, sum(x1)
. tab group, sum(x2)
统计描述及区间估计
可信区间的估计
ci 变量 [, level(#) binomial poisson exposure(观察数变量) by(分组变量)
total ]
cii 观察数均数标准差 [, level(#) ]
level(#) /* 指定可信度,缺失时为95(%) by(分组变量) /* 指定按分组变量分别估计均数的可信区间total /* 指定除按分组变量估计可信区间外,还对整个数据估计,仅用于指定了by(分组变量)时
. use c:\mydata\ex2
. sort group
/* 在用by(分组变量)前,必须对分组变量排序
. ci x1 x2, by(group)
STATA的作图
作图命令GRAPH
graph [变量名] [, 图形类型通用选择项特殊选择项]
图形类型
histogram /* 直方图,为缺省值。
oneway /* 一维散点图
twoway /* 二维散点图、线图
matrix /* 二维散点图阵
bar /* 条图、百分条图
pie /* 圆(饼)图
box /* 箱式图
star /* 星形图
STATA的作图
作图命令GRAPH
常用选项
bin(#) /* 将数据分几组,缺省为5。
freq /* 指定纵轴用频数表示,否则为频率。
normal /* 给直方图加上相应正态曲线。
xlab/ylab/[(#,……,#)] /*指定坐标轴的界点。
b2/l2[(“字符串”)] /*指定坐标轴的副标题。
STATA的作图
如何利用STATA绘制频数分布图?
例 130名14岁女孩身高资料。
gra x,bin(10) freq normal
xlab(124,128,132,136,140,144,148,152,156,160,164)
ylab(5,10,15,20,25,30,35,40)
数值变量资料的描述
均数、几何均数、中位数、百分位数
极差、四分位数间距、方差、标准差
变异系数
对称分布均数±标准差
偏态分布中位数±四分位数间距
数值变量资料的描述
means [变量名]
summarize [变量名] [, detail ]
centile [变量名] [, centile(#) ] 其他选项
detail /* 详细描述,缺失时为简单描述centile(#) /* 指定需要计算的百分位数
某市1997年12岁男童120人的身高(cm)资料如下
sum x
sum x,d
sum x if x<140
sum x if x<140,d
centile x
centile x,centile(25,50,75)
例
有五份血清的抗体效价为
1:10, 1:20, 1:40, 1:80, 1:160,
描述其抗体滴度的平均水平。
means x
STATA的作图
作图命令graph 简写gra
gra [变量名] [, 图形类型通用选择项特殊选择项] 图形类型
histogram /* 直方图
oneway /* 一维散点图
twoway /* 二维散点图、线图
matrix /* 二维散点图阵
bar /* 条图、百分条图
pie /* 圆(饼)图
box /* 箱式图
star /* 星形图
直方图
数值变量资料的统计分析
样本均数与总体均数比较的t检验
配对设计 t检验
成组设计t 检验
方差齐性检验
样本均数与总体均数比较的t检验
ttest 变量名= #val
ttesti #obs #mean #sd #val
例
问题:
统计量与参数不同的两种可能
其一:抽样误差
(偶然的、随机的、较小的)
其二:本质上的差别
(必然的、大于随机误差)
例
样本:某医生随机抽查10名某病患者的血红蛋白,求得其均数为12.59 (g/dl),标准差为1.632619 (g/dl) 。
问题:该病患者的平均Hb含量是否与正常人的平均Hb含量相同 (正常人的平均Hb含量为14.02 (g/dl)。
STATA 命令
ttest 变量名= #val
ttest x =14.02
STATA 结果
ttest x=14.02
One-sample t test
----------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+------------------------------------------------------------------
x | 10
12.59 .5162794 1.632619 11.42209 13.75791
----------------------------------------------------------------------------
Degrees of freedom: 9
Ho: mean(x) = 14.02
Ha: mean < 14.02 Ha: mean ~=
14.02 Ha: mean > 14.02
t = -2.7698 t =
-2.7698 t = -2.7698
P < t = 0.0109 P > |t|
= 0.0218 P > t = 0.9891
STATA 命令
ttesti #obs #mean #sd #val
ttesti 10 12.59 1.632619 14.02
配对设计t检验
ttest 变量1=变量2
STATA 命令
ttest x1=x2
STATA 结果
ttest x1=x2
Paired t test
------------------------------------------------------------------- Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval] ---------+--------------------------------------------------------- x1 | 10
12.59 .5162794 1.632619 11.42209 13.75791
x2 | 10
13.27 .3415813 1.080175 12.49729 14.04271
---------+--------------------------------------------------------- diff | 10
-.6799999.5204272 1.645735 -1.857288 .4972881
-------------------------------------------------------------------
Ho: mean(x1 - x2) = mean(diff) = 0
Ha: mean(diff) < 0 Ha: mean(diff) ~= 0 Ha: mean(diff) > 0 t = -1.3066 t = -1.3066 t = -1.3066
P < t = 0.1119 P > |t| = 0.2237 P > t = 0.8881
成组设计 t 检验
ttest 变量1=变量2, unpaired [unequal]
ttest 变量,by(分组变量)[unequal]
ttesti #obs1 #mean1 #sd1 #obs2 #mean2 #sd2 [,unequal]
unpaired 表示非配对的,如不选就作配对t检验
unequal 表示假设两组方差不齐,如不选表示假设两组方差达到齐性
例(成组设计)
分别测得14例老年人煤饼病人及11例正常人的尿中17 酮类固醇排出量
(mg/dl)如下,试比较两组的均数有无差别
STATA 命令
ttest x1=x2, unpaired
ttest x, by(g)
STATA 结果
ttest x1=x2,unp
Two-sample t test with equal variances
----------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+------------------------------------------------------------------
x1 |
14 4.377857 .3875 1.449892 3.540714
5.215
x2 |
11 5.528182 .5232431 1.735401 4.362324
6.69404
---------+------------------------------------------------------------------
combined |
25 4.884 .3306453 1.653227 4.201582
5.566418
---------+------------------------------------------------------------------
diff
| -1.150325 .636752 -2.467547 .1668972
----------------------------------------------------------------------------
Degrees of freedom: 23
Ho: mean(x1) - mean(x2) = diff = 0
Ha: diff < 0 Ha: diff ~=
0 Ha: diff > 0
t = -1.8066 t =
-1.8066 t = -1.8066
P < t = 0.0420 P > |t|
= 0.0839 P > t = 0.9580
两组资料间的方差齐性检验
sdtest 变量名1 = 变量名2
sdtest 变量,by(分组变量)
sdtesti #obs1 #mean1 #sd1 #obs2 #mean2 #sd2
单因素方差分析及方差齐性检验
oneway 因变量分组变量,[选择项]
noanova /* 不打印方差分析表
missing /* 将缺省值作为单独的一组
tabulate /* 打印各组的基本统计量表简写:t
scheffe /* Scheffe法简写:sch
Bonferroni /* Bonferroni法简写:bon
sidak /* Sidak法简写:si
各组均数两两比较
oneway x group,noanova sch
Comparison of var3 by group
(S cheffe)
Row Mean-|
Col Mean | 1 2
---------+----------------------
2 | -.425
| 0.426
|
3 | -.91 -.485
| 0.024 0.330
STATA软件及其应用-III
秩和检验和相关与回归分析
秩变换
配对资料的秩和检验;
两组资料的秩和检验;
多组资料的秩和检验;
直线相关分析;
等级相关分析;
直线回归分析;
秩变换
genrank 新变量= 原变量
egen 新变量=rank(原变量)
配对资料的秩和检验
signrank 变量1 = 变量2 [if 变量1!=变量2]
两组资料的秩和检验
ranksum 观察值变量,by(分组变量)
两组资料的秩和检验
两组资料的秩和检验
例3 用复方猪胆胶囊治疗老年性慢性支气管炎患者403例,疗效见第(1)~ (3)栏。
问该药对此两型支气管炎疗效是否相同?
两组资料的秩和检验
expand f
ranksum x,by(g)
多组资料的秩和检验
kwallis 观察值变量, by(分组变量)
多组资料的秩和检验
直线相关和回归分析
correlate [变量名]
pwcorr [变量名] , [sig star(#) ]
regress 因变量自变量
predict 新变量 , [stdp] [stdf]
stdp 计算估计值的标准误
stdf 估计预测值y的标准差
sig 打印相关系数假设检验
之 P值
star(#) 如果相关系数的假设检验之P值小于#,则在
相关系数旁打印星号
来自:
/blog/cns!3F0A2D82728FA043!336.ent ry
类别:Stata | 添加到搜藏 | 浏览(323) | 评论(0)
上一篇:SAS、Stata与SPSS的比较下一篇:医学论文撰写中常见的统计学问题...
最近读者:
登录后,您就出现在这里。
我常用到的stata命令:
(续)
实证工作中往往接触的是原始数据。
这些数据没有经过整理,有一些错漏和不统一的地方。
比如,对某个变量的缺失观察值,有时会用点,有时会用-9,-99等来表示。
回归时如果使用这些观察,往往得出非常错误的结果。
还有,在不同的数据文件中,相同变量有时使用的变量名不同,会给合并数据造成麻烦。
因此,拿到原始数据后,往往需要根据需要重新生成新的数据库,并且只使用这个新库处理数据。
这部分工作不难,但是非常基础。
因为如果在这里你不够小心,后面的事情往往会白做。
假设你清楚地知道所需的变量,现在要做的是检查数据、生成必要的数据并形成数据库供将来使用。
检查数据的重要命令包括codebook,su,ta,des和list。
其中,codebook提供的信息最全面,缺点是不能使用if条件限制范围,所以,有时还要用别的帮帮忙。
su空格加变量名报告相应变量的非缺失的观察个数,均值,标准差,最小值和最大值。
ta空格后面加一个(或两个)变量名是报告某个变量(或两个变量二维)的取值(不含缺失值)的频数,比率和按大小排列的累积比率。
des后面可以加任意个变量名,只要数据中有。
它报告变量的存储的类型,显示的格式和标签。
标签中一般记录这个变量的定义和单位。
list报告变量的观察值,可以用if或in来限制范围。
所有这些命令都可以后面不加任何变量名,报告的结果是正在使用的数据库中的所有变量的相应信息。
说起来苍白无力,打开stata亲自实验一下吧。
顺带说点儿题外话。
除了codebook之外,上述统计类的命令都属于r族命令(又称一般命令)。
执行后都可以使用return list报告储存在r()中的统计结果。
最典型的r族命令当属summarize。
它会把样本量、均值、标准差、方差、最小值、最大值、总和等统计信息储存起来。
你在执行su之后,只需敲入return list就可以得到所有这些信息。
其实,和一般命令的return命令类似,估计命令(又称e族命令)也有ereturn命令,具有报告,储存信息的功能。
在更复杂的编程中,比如对回归分解,计算一些程序中无法直接计算的统计量,这些功能更是必不可少。
检查数据时,先用codebook看一下它的值域和单位。
如果有-9,-99这样的取值,查一下问卷中对缺失值的记录方法。
确定它们是缺失值后,改为用点记录。
命令是replace (变量名)=. if (变量名)==-9。
再看一下用点记录的缺失值有多少,作为选用变量的一个依据。
得到可用的数据后,我会给没有标签的变量加上注解。
或者统一标签;或者统一变量的命名规则。
更改变量名的命令是ren (原变量名)空格(新变量名)。
定义标签的命令是label var (变量名)空格”(标签内容)”。
整齐划一的变量名有助于记忆,简明的标签有助于明确变量的单位等信息。
如果你需要使用通过原始变量派生出的新变量,那么就需要了解gen,egen和replace这三个命令。
gen和replace常常在一起使用。
它们的基本语法是gen (或replace)空格(变量名)=(表达式)。
二者的不同之处在于gen是生成新变量,replace是重新定义旧变量。
虚拟变量是我们常常需要用到的一类派生变量。
如果你需要生成的虚拟变量个数不多,可以有两种方法生成。
一种是简明方法:gen空格(变量名)=((限制条件))[这外面的小括弧是命令需要的,里面的小括弧不是命令需要的,只是说明“限制条件”并非命令]。
如果某个观察满足限制条件,那么它的这个虚拟变量取值为1,否则为0。
另一种要麻烦一点。
就是
gen (变量名)=1 if (取值为一限制条件)
replace(相同的变量名)=0 if (取值为零的限制条件)
两个方法貌似一样,但有一个小小的区别。
如果限制条件中使用的变量都没有任何缺失值,那么两种方法的结果一样。
如果有缺失值,第一种方法会把是缺失值的观察的虚拟变量都定义为0。
而第二种方法可以将虚拟变量的取值分为三种,一是等于1,二是等于0,三是等于缺失值。
这样就避免了把本来信息不明的观察错误地纳入到回归中去。
下次再讲如何方便地生成成百上千个虚拟变量。
最重要的两个命令莫过于help和search了。
即使是经常使用stata的人也很难,也没必要记住常用命令的每一个细节,更不用说那些不常用到的了。
所以,在遇到困难又没有免费专家咨询时,使用stata自带的帮助文件就是最佳选择。
stata 的帮助文件十分详尽,面面俱到,这既是好处也是麻烦。
当你看到长长的帮助文件时,是不是对迅速找到相关信息感到没有信心?
闲话不说了。
help和search都是查找帮助文件的命令,它们之间的区别在于help 用于查找精确的命令名,而search是模糊查找。
如果你知道某个命令的名字,并且想知道它的具体使用方法,只须在stata的命令行窗口中输入help空格加上这个名字。
回车后结果屏幕上就会显示出这个命令的帮助文件的全部内容。
如果你想知道在stata下做某个估计或某种计算,而不知道具体该如何实现,就需要
用search命令了。
使用的方法和help类似,只须把准确的命令名改成某个关键词。
回车后结果窗口会给出所有和这个关键词相关的帮助文件名和链接列表。
在列表中寻找最相关的内容,点击后在弹出的查看窗口中会给出相关的帮助文件。
耐心寻找,反复实验,通常可以较快地找到你需要的内容。
下面该正式处理数据了。
我的处理数据经验是最好能用stata的do文件编辑器记下你做过的工作。
因为很少有一项实证研究能够一次完成,所以,当你下次继续工作时。
能够重复前面的工作是非常重要的。
有时因为一些细小的不同,你会发现无法复制原先的结果了。
这时如果有记录下以往工作的do文件将把你从地狱带到天堂。
因为你不必一遍又一遍地试图重现做过的工作。
在stata窗口上部的工具栏中有个孤立的小按钮,把鼠标放上去会出现
“bring do-file editor to front”,点击它就会出现do文件编辑器。
为了使do文件能够顺利工作,一般需要编辑do文件的“头”和“尾”。
这里给出我使用的“头”和“尾”。
/*(标签。
简单记下文件的使命。
) */
capture clear (清空内存中的数据)
capture log close (关闭所有打开的日志文件)
set mem 128m (设置用于stata使用的内存容量)
set more off (关闭more选项。
如果打开该选项,那么结果分屏输出,即一次只输出一屏结果。
你按空格键后再输出下一屏,直到全部输完。
如果关闭则中间不停,一次全部输出。
)
set matsize 4000 (设置矩阵的最大阶数。
我用的是不是太大了?)
cd D: (进入数据所在的盘符和文件夹。
和dos的命令行很相似。
)log using (文件名).log,replace (打开日志文件,并更新。
日志文件将记录下所有文件运行后给出的结果,如果你修改了文件内容,replace选项可以将其更新为最近运行的结果。
)
use (文件名),clear (打开数据文件。
)
(文件内容)
log close (关闭日志文件。
)
exit,clear (退出并清空内存中的数据。
)
这个do文件的“头尾”并非我的发明,而是从沈明高老师那里学到的。
版权归沈明高老师。
(待续)
实证工作中往往接触的是原始数据。
这些数据没有经过整理,有一些错漏和不统一的地方。
比如,对某个变量的缺失观察值,有时会用点,有时会用-9,-99等来表示。
回归时如果使用这些观察,往往得出非常错误的结果。
还有,在不同的数据文件中,相同变量有时使用的变量名不同,会给合并数据造成麻烦。
因此,拿到原始数据后,往往需要根据需要重新生成新的数据库,并且只使用这个新库处理数据。
这部分工作不难,但是非常基础。
因为如果在这里你不够小心,后面的事情往往会白做。
假设你清楚地知道所需的变量,现在要做的是检查数据、生成必要的数据并形成数据库供将来使用。
检查数据的重要命令包括codebook,su,ta,des和list。
其中,codebook提供的信息最全面,缺点是不能使用if条件限制范围,所以,有时还要用别的帮帮忙。
su空格加变量名报告相应变量的非缺失的观察个数,均值,标准差,最小值和最大值。
ta空格后面加一个(或两个)变量名是报告某个变量(或两个变量二维)的取值(不含缺失值)的频数,比率和按大小排列的累积比率。
des后面可以加任意个变量名,只要数据中有。
它报告变量的存储的类型,显示的格式和标签。
标签中一般记录这个变量的定义和单位。
list报告变量的观察值,可以用if或in来限制范围。
所有这些命令都可以后面不加任何变量名,报告的结果是正在使用的数据库中的所有变量的相应信息。
说起来苍白无力,打开stata亲自实验一下吧。
顺带说点儿题外话。
除了codebook之外,上述统计类的命令都属于r族命令(又称一般命令)。
执行后都可以使用return list报告储存在r()中的统计结果。
最典型的r族命令当属summarize。
它会把样本量、均值、标准差、方差、最小值、最大值、总和等统计信息储存起来。
你在执行su之后,只需敲入return list就可以得到所有这些信息。
其实,和一般命令的return命令类似,估计命令(又称e族命令)也有ereturn命令,具有报告,储存信息的功能。
在更复杂的编程中,比如对回归分解,计算一些程序中无法直接计算的统计量,这些功能更是必不可少。
检查数据时,先用codebook看一下它的值域和单位。
如果有-9,-99这样的取值,查一下问卷中对缺失值的记录方法。
确定它们是缺失值后,改为用点记录。
命令是replace (变量名)=. if (变量名)==-9。
再看一下用点记录的缺失值有多少,作为选用变量的一个依据。
得到可用的数据后,我会给没有标签的变量加上注解。
或者统一标签;或者统一变量的命名规则。
更改变量名的命令是ren (原变量名)空格(新变量名)。
定义标签的命令是label var (变量名)空格”(标签内容)”。
整齐划一的变量名有助于记忆,简明的标签有助于明确变量的单位等信息。
如果你需要使用通过原始变量派生出的新变量,那么就需要了解gen,egen和replace这三个命令。
gen和replace常常在一起使用。
它们的基本语法是gen (或replace)空格(变量名)=(表达式)。
二者的不同之处在于gen是生成新变量,replace是重新定义旧变量。
虚拟变量是我们常常需要用到的一类派生变量。
如果你需要生成的虚拟变量个数不多,可以有两种方法生成。
一种是简明方法:gen空格(变量名)=((限制条件))[这外面的小括弧是命令需要的,里面的小括弧不是命令需要的,只是说明“限制条件”并非命令]。
如果某个观察满足限制条件,那么它的这个虚拟变量取值为1,否则为0。
另一种要麻烦一点。
就是
gen (变量名)=1 if (取值为一限制条件)
replace(相同的变量名)=0 if (取值为零的限制条件)
两个方法貌似一样,但有一个小小的区别。
如果限制条件中使用的变量都没有任何缺失值,那么两种方法的结果一样。
如果有缺失值,第一种方法会把是缺失值的观察的虚拟变量都定义为0。
而第二种方法可以将虚拟变量的取值分为三种,一是等于1,二是等于0,三是等于缺失值。
这样就避免了把本来信息不明的观察错误地纳入到回归中去。
下次再讲如何方便地生成成百上千个虚拟变量。
(续)
大量的虚拟变量往往是根据某个已知变量的取值生成的。
比如,在某个回归中希望控制每个观察所在的社区,即希望控制标记社区的虚拟变量。
社区数目可能有成百上千个,如果用上次的所说的方法生成就需要重复成百上千次,这也太笨了。
大量生成虚拟变量的命令如下;
ta (变量名), gen((变量名))
第一个括号里的变量名是已知的变量,在上面的例子中是社区编码。
后一个括号里的变量名是新生成的虚拟变量的共同前缀,后面跟数字表示不同的虚拟变量。
如果我在这里填入d,那么,上述命令就会新生成d1,d2,等等,直到所有社区都有一个虚拟变量。
在回归中控制社区变量,只需简单地放入这些变量即可。
一个麻烦是虚拟变量太多,怎么简单地加入呢?一个办法是用省略符号,d*表示所有d字母开头的变量,另一法是用破折号,d1-d150表示第一个到第150个社区虚拟变量(假设共有150个社区)。
还有一种方法可以在回归中直接控制虚拟变量,而无需真的去生成这些虚拟变量。
使用命令areg可以做到,它的语法是。