赞
踩
3.1什么是do文件
主要参考百度网盘《120分钟搞定论文数据......》
在do-file中操作:
在command window输入(→[enter]):
tab employst gender,col
gen isol=0
replace isol=1 if datnum<=2 & numfrien<=2
gen isol1=0
replace isol1=1 if datnum<=1 & numfrien<=1
/*更改条件if语句:将第二、三行复制黏贴,由于已经存在isol,因此需引入新的变量isol1*/
*注释
/*
(一)注释(二)不想运行某段的好方法
*/
*enter键表“换行”,不表“运行”
注释和需要忽略的命令:绿色
3.2数据管理
记得用do
使用标签
①该步骤一共要做A(处理变量标签)和B1、B2(处理值标签)
②变量标签:附加到变量上,通常用于提供关于变量本身的更多细节。
值标签:是和变量的某个值相对应的。
③值标签:在Stata中,值标签A1(male)是指与变量B(gender)每个值C(如0、1)相关联的完整的标签集A(male、female)。
Eg. 变量gender取值为0代表受访者为male,在这种情况下“male”是与0值相对应的值标签。
④命令语序:先值,标签在后面。
⑤标签要用引号“”括起来(特别是有空格的时候)。
创建变量标签:
创建并将标签附加到变量的命令应该为:label variable(lab var)
在command window输入(→[enter]):
lab var isol isolated
tab isol
变量标签:
①如果变量标签包含空格,则在输入命令时必须将其括在引号中。
②可以在不删除旧变量标签的情况下附加新的变量标签,这时只需要调用lab var自动覆盖已存在的标签即可。
③变量标签不能用来说明变量取值的含义,值标签则可以用来说明变量的取值。
值标签B1、B2:
①B1先创建值标签,B2再将该值标签附加到哪个变量上。
②值标签:指的是给定的一组值得标签集合。如0代表male,1代表female的组合将形成变量性别的值标签。
③B1:创建值标签,即定义值标签。即告诉Stata改标签应该附加在所有可能取值集合的哪个数字上。
④B1:label define(lab def)+值+标签
⑤B2:label value(lab val)+值+标签
⑥注意英文双引号的运用,最好直接复制"(值标签正确双引号)
⑦在值标签isollab中,你已经定义了0是与标签“not isolated”相关联的。不管将标签isollab附加到哪个变量上,都将使用“not isolated”标签标识取值为0的情况。
但是你也可以创建一个新的值标签,其中0的值具有不同的标签。如,可以创建一个值标签yesno,定义为0表示“no”,1表示“yes”,然后可以在任何0表示“no”,1表示“yes”的变量中使用。
⑧可以频繁地改变值标签却不会改变变量的取值。
⑨一旦为这些数据集定义了一个通用的值标签,我们就可以把它附加到很多同样类型的变量上。
创建值标签B1:
①命名值标签集为isollab。
②代码0代表不孤独的,代码1代表孤独的。
在command window输入(→[enter]):
lab def isollab 0 "Not Isolated" 1 "Isolated"
将该值标签附加到哪个变量上B2:
在command window输入(→[enter]):
lab val isol isollab
tab isol
添加标签:
此后,可以使用同样的值标签标记之前定义的变量isol1:
在command window输入(→[enter]):
lab val isol1 isollab
tab isol1
改变值标签(值标签完整):
Eg. 当要把“Isolated”改为“Estranged”这个标签,可以创建一个新的变量标签(lab def estrange 0 “Not Estranged” 1 “Estranged”),然后把它附加到isol变量上(lab val isol estrange)。如果你生成这个变量的分布,就会发现仍然是27个样本属于同一组,取值为1,但是现在它们的标签是“Estranged”而不是“Isolated”。
在command window输入(→[enter]):
lab def estrange 0 "Not Estranged" 1 "Estranged"
lab val isol estrange
tab isol
需要知道变量的取值而不是标签:
在command window输入(→[enter]):
tab employst if isol==#
(“#”代表一个思考过程,直接复制粘贴时,系统会提示invalid syntax,没有影响)
识别正确数值:
①最简单方法是生成isol变量的两个分布:一是显示值标签②,二是显示与每个标签相关联的数值④。
在command window输入(→[enter]):
tab isol
②调用nolable(nol)选项:产生一个值标签分布。
在command window输入(→[enter]):
tab isol,nol
③可以看到分布是完全相同的,只是用数值替换了标签。
④现在可以清楚地看到,“非孤独的”表示为0。
要显示“非孤独的”受访者就业状态的分布表:
在command window输入(→[enter]):
tab employst if isol==0
缺失数据
在开始考察这些边梁之间的关系前,看一下受访者朋友数量的分布。
在command window输入(→[enter]):
tab numfrien
两类缺失数据:refused和legitimate skip。
处理缺失数据的第一步通常是简单地将其从分析中删除。
①将numfrien变量中的12个样本用缺失代码来替换。
②对于识别缺失值,recode是最有效的。
③每个缺失代码都代表了一个由于某种原因缺失的值,允许用户在需要时识别甚至恢复原始值。
④使用带有nol选项的tab命令是非常有用的。
在command window输入(→[enter]):
tab numfrien,nol
使用缺失值代码的好处:
①如果运行统计分析的命令,比如求均值,对于变量numfrien,Stata会将3个样本视为有888个朋友,9个样本视为有999个朋友,这显然会产生错误的结果。
②Stata有27个不同的缺失值代码,可以用来定义应特定原因而缺失的值,最基本的代码是“.”,有时候称其为系统缺失值。系统缺失值意味着样本只是缺失,没有已知或确定的原因。
③其它26个缺失值代码很相似,都是“.”后边加一个字符,如.d,.s,.r等,这些字母通常都是缺失原因的缩写。
重新设置缺失值代码:
①如果数据缺失的原因是知道的,最好使用包含更多信息的特定代码。
②可以设置拒绝回答这个问题的样本为“.r”,而合理调过这个问题的样本记为“.s”。
③想要重新设置代码,需要在command window输入(→[enter]):
recode numfrien (888=.s)(999=.r)
tab numfrien
④默认地,在分析中Stata不包含已设定为缺失值的样本,所以在变量numfrien的分布中没有包含已经编码的12个缺失值。
⑤分布的百分比发生了变化,由于排除了12个缺失值样本,用于计算这些百分比的样本总数从2532个变为2520个。
⑥为了使Stata在变量的分布中包含缺失值样本(分布的百分比做相应的调整),可以调用missing(mis)选项。
在command window输入(→[enter]):
tab numfrien,mis
如果使用if语句,缺失值样本仍会被评估。此时,Stata将所有缺失值的取值视为比该变量的最大值还大。因此在包含大于号“>”的表达式中引用具有缺失值的变量时,记住这一点很重要。
①构造一个取两个值的变量,分别表示有很多的年轻人和有较少朋友的年轻人,为了进行分类,将由4个或更多朋友的人视为有很多朋友,使用带有gen(newvar)选项的replace命令来构造这个变量。(用replace不用recode)
在command window输入(→[enter]):
gen hifrien=.
②在新变量中每个样本首先被设置为空值,这是一种创建新变量的有效方法,可防止在新生成的变量中包含不需要的情况(例如缺失值)。
在command window输入(→[enter]):
replace hifrien=0 if numfrien <=3
tab hifrien
③将有3个或更少朋友的样本取值为0,而有4个或更多朋友的样本应该取值为1。
不能有此步骤:
此处仅作说明,具体代码请见下一步④:
在command window输入(→[enter]):
replace hifrien = 1 if numfrien>=4
tab hifrien
④修正缺失值错误:
在command window输入(→[enter]):
replace hifrien = 1 if (numfrien>=4 & numfrien<=5)
tab hifrien
【注意】
①如果应该设定为缺失值的样本没有使用缺失值代码进行编码,那么它们将被包含在所有的分析中;如果使用缺失值编码,那么在分析中将被自动排除。
②手工输入数据,在输入数据时要把缺失值标记出来,而不是在以后的分析进行标注。
③处理涉及多个变量且存在数据缺失情况的读者,应该参考第八章“高级便捷的命令”一节的“Mark和Markout”部分。
使用字符型变量
①命令gen在默认的情况下会产生数值型变量。如果要产生字符型变量需要特别指明。
②不管什么时候在字符型变量中引用一个值时,都必须用引号括起来。
③Stata不区分大小写,但是在设置字符型变量时,不管使用大写还是小写,必须前后一致。
Eg.在新生成的字符型变量中纪委“Christian”,其他的样本设置为缺失值:
产生一个字符型变量christoth(christ other)→将新的字符型变量赋值为“Christian”→当变量religoth的取值属于所列举的任意一种时,变量christoth的值等于“Christian”。
在command window输入(→[enter]):
gen str christoth="Christian" if religoth == "CHRISTIAN" | religoth == "JUST CHRISTIAN" | religoth == "NONDENOMINATIONAL CHRISTIAN"
tab christoth
字符型变量的缺失值代码:
①对于字符型变量stata将把这些代码(.d或 .s等)解读为正常的有效取值,唯一有效的缺失值代码是空格,即“ ”。
②如上所述,有27个缺失的代码可用于识别数值型变量数据缺失的情况。
③replace是最有效的命令,因为recode对于字符型变量是无效的。
④就像使用gen命令(↑)一样,replace对于数值型变量和字符型变量是类似的,其主要差别就是对字符型变量赋值的时候必须使用引号。
⑤引号包围了字符型变量的值而不是变量本身。
⑥先前的缺失值已经被设定为恰当的字符型取值。系统默认,tab命令按照字母顺序展示字符型变量的取值,但是可以调用sort选项使得按照频数顺序显示取值。
改变缺失值:
①将变量christoth当前的缺失值替换为"Specific Other Denomination.",而不是替换religoth中的缺失值。
②如果不包含if语句中的第二部分,与变量religoth中的缺失值相对应的样本也将被赋值为"Specific Other Denomination.",这是不合适的,因为这些样本没有报告他们有其他的宗教,他们对应的值是缺失的。
在command window输入(→[enter]):
replace christoth="Specific Other Denomination" if christoth ==" " & religoth !=" "(错误)
tab christoth
【解析】在这段代码中,首先判断religoth的值是否为"CHRISTIAN"、"JUST CHRISTIAN"或"NONDENOMINATIONAL CHRISTIAN",如果是,就把christoth赋值为"Christian"。然后再判断christoth是否为空,如果是,且religoth不为空,就把christoth赋值为"Specific Other Denomination"。最后使用tab命令对christoth进行分类汇总。
在你的代码中,gen命令是正确的,但replace命令有一些问题。首先,如果你想判断一个字符串是否为空,应该使用==""而不是= " "。其次,如果christoth的值已经被赋值为"Christian",那么它就不会再为空了,所以replace命令的条件也不会成立。
因此,如果你想要得到你期望的结果,应该使用下面的代码:
gen str christoth="Christian" if religoth == "CHRISTIAN" | religoth == "JUST CHRISTIAN" | religoth == "NONDENOMINATIONAL CHRISTIAN"
replace christoth="Specific Other Denomination" if christoth == "" & religoth !=""
tab christoth
【正解】
replace christoth="Specific Other Denomination" if christoth == "" & religoth !=""
tab christoth
字符型变量的原因:
①优点在于可以输入受访者对问题的实际应答,因此如果变量是基于一个开放式的问题,那么字符型变量是一个好的选择。
②只有在绝对必要的情况下才使用字符型变量,即使变量的值是文本形式的(例如male),这些值通常可以用来数值来代替。
Eg. 在前面的例子中,将christoth定义为数值型变量来区分不同的类别可能更为有效。
③因为尽管很多命令对于数值型变量和字符型变量的操作类似,但是大多数统计分析都要求变量是数值型的。
将字符型变量转换为数值型变量:
①encode,gen(newvar)
②字符型变量取值作为对应数值的值标签。
③,gen(newvar)作为选项告诉Stata新的数值型变量的名字。其中输入的新变量名不能与原来的变量同名。
③命令encode根据字符型变量取值的字母顺序分配数值(从1开始)。
Eg.将字符型变量christoth转换为数值型变量:
新的数值型变量名多了一个n,表示新变量是原来字符型变量所对应的数值型变量。
在command window输入(→[enter]):
encode christoth,gen(nchristoth)
在command window输入(→[enter]):
tab nchristoth,nol
保存结果
①log文件保存了它启动后,结果窗口中出现所有内容的运行日志。
②默认地,Stata不运行log文件。相反地,你必须自行启动log文件,然后自行关闭。
③点击第四个图标:log按钮
④log文件可以保存为Log(smcl)的形式,也可以保存为Log(.log)的形式。如果你熟悉 .smcl格式,它可能是有优势的,如果不熟悉,Log(.log)可能更高效,因为它很容易被大多数文字处理程序打开和阅读。
⑤Log(.log)格式存储运行日志,在“Save as Type.”下拉菜单中选择“Log(.log)”,如果已经命名了log文件,直接点击Save,在结果窗口中就会出现一个记事本,表明log文件已经开始工作。在此之后和关闭日志之前出现在结果窗口中的所有内容都由log文件保存。但是在开始log文件运行之前的所有结果不会保存在log文件中。
⑥关闭log文件:再次点击log按钮③。会出现有三个选项的对话框:
⑦log文件的一个很好的特性是他们可以被重新打开和追加,这样多个Stata会话可以保持连续的记录。要再次打开一个log文件,点击log按钮,找到已有的log文件的路径即可。
⑧有时可能需要在“Save as Type.”下拉菜单中更改文件类型以便准确找到想要的文件,如选择“Log(.log)”。
⑨一旦找到了文件的位置,选择文件双击或点击Save按钮,就会出现如下对话框:
因此,log+do:
一旦确定了所需的分析,就可以打开log文件,并使用do文件有选择低运行这些命令。
u3notes@用Stata进行量化分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。