Stata学习笔记.docx
《Stata学习笔记.docx》由会员分享,可在线阅读,更多相关《Stata学习笔记.docx(23页珍藏版)》请在冰点文库上搜索。
Stata学习笔记
以下命令均采用小写字母
Chapter1stata入门
打开数据
use"D:
\Stata9\",clear用use命令打开数据
sysuseauto,clearauto为系统数据sysuse为打开系统数据的命令
获取帮助
Helpsummarizesummarize为需要获取帮助对象可以改为其他的需要帮助的对象
Finditsummarize,net寻找网络帮助summarize为需要获取帮助对象
Searchsummarize,net寻找网络帮助summarize为需要获取帮助对象
显示结果
Display5+9
描述统计(summarize可简写成sum)
Useatuo,clear
Summarizeprice描述price的观察值个数、平均值、标准差、最小值、最大值
Sumweightsummarize可简写成sum
Sumweightprice同时完成上面两步
绘图
Scatterpriceweightscatter为绘制散点图命令
Linepriceweight,sortline为绘制折线图命令,sort为排序,绘制折线图前需要先排序
生成新的数据(generate可简写成gen)
Clear
Setobs1000设置观测值的组数
Genx=_n_n为观察值得序号
Geny=x+100
控制结果输出显示
Listn
设置屏幕滚动
Setmoreoff先设置此项则显示时,屏幕不停止
Setmoreon先设置此项则显示时,会使显示停止
清除内存中原有内容
clear
设置文件存取路径(cd)
Cdd:
\statad:
\stata为路径
如果想知道当前路径下有哪些文件,可以用dir命令来列示
.dir
假设你想在D盘的根目录下创建一个新的文件夹mydata来存放数据文件,
命令为mkdir。
mkdird:
\mydata
错误提示
Listmyvar
上述命令试图显示变量myvar,但是结果窗口仅出现如下的显示
variablemyvarnotfound
r(111);
红色信息表明,没有找到一个叫myvar的变量,的确,我们的数据中并没有
这个变量。
List巧妇难为无米之炊。
红色信息下面还有一个天兰色的r(111),用鼠标点击,即可弹进一个帮助信
息框,给出错误的更详尽解释。
再比如,我们在求五数概略时,误把sum写成了sun
.sun
unrecognizedcommand:
sun
r(199);
显示说不认识sun这个命令。
附录:
常见命令
Chapter2命令语句
掌握命令语句的格式
[byvarlist:
]command[varlist][=exp][ifexp][inrange][weight][,options]
注:
[]表示可有可无的项,显然只有command是必不可少的,下面结合例子分
项来讲解命令的各个组成部分。
命令command
[byvarlist:
]command[varlist][=exp][ifexp][inrange][weight][,options]
.cdd:
/stata9
.useauto,clearsummarize/*很多命令可单独使用,单独使用时,一般是对所有变量进
行操作,等价于后面加上代表所有变量的_all。
*/
.summarize_all/注意到该命令输出结果与上一个命令完全一样
.sumsusu是summarize的最简化略写,不能再简化为s
.scdd:
/stata9
.useauto,clear
.sumpricesupsutsumtrtucdd:
/stata9
.useauto,clear
.byforeign:
sumpriceweightsortpricebyforeign:
sumpriceweight
*notsorted
/*系统提示没有排序,这是因为byvarlist在执行时要求内存中的数据是按照
by后面的变量排序的。
当我们用sortprice重新排序后,就打乱了原来按照
foreign的排序,所以出现了错误提示。
更正的办法是:
*/
.sortforeignbyforeign:
sumpriceweight
*更简略的方式是把两个命令用一个组合命令来写。
.byforeign,sort:
sumpriceweight
如果不想从小到大排序,而是从大到小排序,其命令为gsort。
.gsort-price/按价格从高到低排序
.gsortforeign–price/*先把国产车都排在前,进口车排在后面,然后在国产车内再按价格从大小到排序,在进口车内部,也按从大到小排序*/
赋值及运算=exp
[byvarlist:
]command[varlist][=exp][ifexp][inrange][weight][,options]
例:
生成一个新的价格变量nprice,该变量的取值为原汽车价格变量price的基础上涨10元
.cdd:
/stata9
.useauto,clear
.gennprice=price+10listpricenpricereplacenprice=nprice-10/*命令replace则直接改变原变量的赋值,nprice调减后与price变量取值相等*/
.listpricenpricecdd:
/stata9
.useauto,clear
.listmakepriceifforeign==0
*只查看价格超过1万元的进口车(同时满足两个条件),则
.listmakepriceifforeign==1&price>10000
*查看价格超过1万元或者进口车(两个条件任满足一个)
.listmakepriceifforeign==1|price>10000
*分类型查看价格超过1万元的汽车的品牌和价格
.byforeign,sort:
listmakepriceifprice>10000
范围筛选inrange
[byvarlist:
]command[varlist][=exp][ifexp][inrange][weight][,options]
如果要计算较低的前10台车的平均价格,则要先按价格排序,然后仅对前10
个车的价格求平均值
.cdd:
/stata9
.useauto,clear
.sortprice
.sumpricein1/5
注意“1/5”中,斜杠不是除号,而是从1到5的意思,即1,2,3,4,5。
如果要计算前10台车中的国产车的平均价格,则可将范围和条件筛选联合使用。
.sumpricein1/10ifforeign==0
加权weight
[byvarlist:
]command[varlist][=exp][ifexp][inrange][weight][,options]
任务:
下表是2005年湖北省高考640分及以上成绩一分一段的人数统计,第一
列score为高考分数,第二列num为该分数段的人数。
现在我们要求640分及以
上考生的平均分数。
scorenum
650193
64926
64823
64716
64621
64526
64432
64323
64238
64129
64038
操作:
先将上面的表格复制,然后进入STATA,执行如下命令
.clearedit
然后把光标定位在表格的第一行第一列,点右键,选择粘贴(paste),上表数
据便被复制到STATA中,退出数据编辑器
sumscoresumscore[weight=num]/*加权计算,比较该结果与sumscore的区别,
实际上,不用权重选项时,相当于权重相等。
*/
.sumscore[w=n]sumscore,detail
.sumscore,dcdd:
/stata9
.useauto,clear
.listpricein1/30,sep(10)listpricein10/30,sep
(2)listprice,nohead3.1.1ta,如果在STATA
软件当前路径下,直接用use命令即可打开;如果不在当前路径下,则可以使用
sysuse命令打开。
.useauto,clearcdd:
/useauto,clear
filenotfoundsysuseauto,clear3.1.2usenlswork,clear
filenotfound
此时,如果确定该数据为示例数据,可以直接通过网络获取,其命令为:
.usewebusenlswork,clear另一个网络数据较多的地方是波士登大学的数据中心,伍德里奇的《计量经
济学导论》一书中所使用的全部数据都可以通过该数据中心获得。
比如
.use即打开教材中例中所使用的CEO数据。
use命令只能打开后辍名为“*.dta”格式的数据,.dta格式以外的数据,STATA
不能直接读取,需要从外部读入,最简单而直接的办法是复制和粘贴。
但是有时
没有其他软件,比如,我们有SAS格式或SPSS格式的数据,但没有SAS软件
和SPSS软件,此时需要用STATA提供的其他命令或者使用transfer数据格式转
化软件。
在讨论其他输入或导入数据的方法之前,我们先来学习一点数据类型的
知识。
数据类型
STATA通常把变量划分为三类:
分别是数值型,字符型和日期型
3.2.1数值变量:
用0、1、2…9及+、–(正负号)与小数点“(.)”来表示。
在输入数据时,
逗号不能被识别,如1,024应该直接写成1024.
5
-5
+3
后面两个数据为科学计数法的数据,分别表示5200和.其中的e相当
于10,因此+3的意思是:
*10=5200
数值型变量按其精度区分,又有五种类型,分别是:
存贮类型最小最大0-领域字节
---------------------------------------------------------------------
byte-127100+/-11
int-32,76732,740+/-12
long-2,147,483,6472,147,483,620+/-14
float*10^38*10^36+/-10^-364
double*10^307*10^307+/-10^-3238
当运算精度要求很高的时候,需要将变量设置成浮点型或双精度型。
另注意1和的精度是不同的,前者在,区间内近似,而后者在
区间内近似。
若多次运算反复取四舍五入,精度较低时将使
计算误差迅速变大,然而,精度高时占用的内存资源较多。
下面的命令有助于理
解变量存贮类型变换。
.clear
.setobs1gena=1d/*d为describ命令的略写,describ命令显示数据集的
属性信息,注意观察显示结果中,a的storagetype为float型,
浮点型为默认类型*/
Containsdata
obs:
1
vars:
1
size:
8%ofmemoryfree)
storagedisplayvalue
variablenametypeformatlabelvariablelabel
afloat%9.0g
Sortedby:
Note:
datasethaschangedsincelastsaved
.compressdreplacea=101/*注意a的storagetype现在自动升为int型,
因为byte最大只能为100*/
awasbytenowint
(1realchangemade)
.replacea=100
.compress
.dreplacea=32741gendoubleb=1recastdoublead3.2.2125.27”125.27”2,343.68”125.27”3.3.13.2.33.2.4
.display2/0
另一种情况是,数据中含有缺失值,而STATA默认的缺失值也用“.”来表
示。
在有些数据文件中,缺失值不是用“.”或者空来表示的,而是用-9996等
来表示,如果要将其全部替换为“.”,或者反之,将“.”替换为-9996,命令
为:
.mvencodeage,mv(-9996)
.mvdecodeage,mv(-9996)
数据类型转化
任务:
将destring1,destring2和tostring中的数据类型进行相互转化
*3.3.1字符型转化成数值型:
destring
*destring1数据中的数据全为字符型,转换为数值型
.webusedestring1,clear
.des/*注意到所有的变量存贮类型(storagetype)均为字符型str#,
其中#号表示字符串长度*/
Containsdatafrom10
vars:
53Mar200510:
15
size:
240%ofmemoryfree)
storagedisplayvalue
variablenametypeformatlabelvariablelabel
idstr3%9s
numstr3%9s
codestr4%9s
totalstr5%9s
incomestr5%9s
.sumennincom=incom+10estring,replaceumennincom=income*istnincomincomeebusedestring2,clear
.desistdate19991210
2.20000708
3.19970302
4.19990900
.destringdate,replaceestringdate,replaceignore(“”)/*忽略空格,然后转换,注意这里的”“中间有一个空格,不是””。
*/
date:
charactersspaceremoved;replacedaslongesistdate
2.
3.
/*与date变量类似,变量price前面有美元符号,变量percent后有百分号,
换为数值型时需要忽略这些非数值型字符。
*/
.destringpricepercent,gen(price2percent2)ignore(“$,%”)
.list$2,34%34
2.$7,86%86
.d3.3.2ebusetostring,clear/*该数据中年月日的数据类型不一样,不能直接相加
生成一个反映日期的新变量*/
.desist
.gendate1=month+”/”+day+”/”+yearostringyearday,replaceesendate1=month+”/”+day+”/”+yearistendate2=date(date1,”mdy”)/*date()为日期函数,它以1960年1月1
日为第0天,计算从那天起直到括号中指定的某天date1
一共过了多少天。
”mdy”指定date1的排列顺序,这里是
按照月日年的顺序来表示日期。
*/
.list1975年12月2idate(“1975/12/27”,”ymd”)
数据显示格式:
format
/*format只控制数据的显示格式,并不改变内存中数据的大小。
*/
.webusecensus10,cleares8.0g11.0g9.0gistin1/4AlabamaSouth3893888
2.AlaskaWest401851
3.ArizonaWest2718215
4.ArkansasSouth2286435
.formatstate%-14sistin1/4AlabamaSouth3893888
2.AlaskaWest401851
3.ArizonaWest2718215
4.ArkansasSouth2286435
.formatregion%-8.0g/*region变量看起来是字符型变量,但实际上为
数据型,它也可以左对齐,同样是加一个负号.
.listin1/4ormatpop%/*pop的显示格式为%11.0g,后面加上c,则每三位数间
用逗号分开,c为comma的意思.*/
.listin1/4AlabamaSouth3,893,888
2.AlaskaWest401,851
3.ArizonaWest2,718,215
4.ArkansasSouth2,286,435
5.CaliforniaWest
*因为这个数太大,加逗号将超过11位数,我们可以先把总的位数增加
.formatpop%istin5CaliforniaWest23,667,902
.formatmedage%8.1fistin1/4
stateregionpopmedage
--------------------------------------------
1.AlabamaSouth3,893,888
2.AlaskaWest401,851
3.ArizonaWest2,718,215
4.ArkansasSouth2,286,435
.genid=_neplaceid=9842in3istin1/3
stateregionpopmedageid
--------------------------------------------
1.AlabamaSouth38938881
2.AlaskaWest4018512
3.ArizonaWest27182159842
.formatid%05.0fistin1/3AlabamaSouth389388800001
2.AlaskaWest40185100002
3.ArizonaWest271821509842
在STATA中直接录入数据:
input
3.5.1菜单式操作
任务:
按学号录入五个学生的经济学成绩
ideconomy
140
280
390
470
553
操作:
(1)点击图标
>>在打开的数据表格第一列中录入五个姓名>>在第二列中录入另五个成绩
双击var1弹出对话框>>将变量改名为id>>在label中写入学号>>退出弹出窗口;
双击var2弹出对话框>>将变量改名为name>>在label中写入姓名>>关闭数据编辑器
(2)点击图标
保存数据>>给数据命令为student>>退出
在建立数据文件后,如果没有存盘,这个文件即是一个“临时的”数据文件,它将随着退出STATA系统时而消失。
当数据文件被存储在后,它将成为一个“永久性”的数据文件,用户可以在以后经常使用它而不必重新建立之。
3.5.2命令操作
任务:
按学号录入五个学生的学号和姓名
idnameeconomy
1John40
2Chris80
3Jack90
4Huang43
5Tom70
操作:
在command窗口中键入(注:
前面的点号不必健入,每完成一行按回车键,
黑体为命令,斜体为变量名或文件名):
对于字符型变量,需要指明其为字符型
并指明最大的字符长度。
•clear•1John403.5.31John40
3.6.1insheetusing,clear
也可以先将“”数据打开并另存为“”,然后用下面的命
令导入
.insheetusing,clear
当数据中某个变量的位数特别长或者对导入数据的精度要求很高的时候,需
要在该命令后面加double选项。
.insheetusing,doubleclear
3.6.2infile命令
对于“”或“”,还可用infile命令导入STATA,此时需
要先指出变量名。
尤其要注意,当变量为字符型时,要先指明。
infileidstr10namegenderminorityeconomymathusing,clear
或者
infileidstr10namegenderminorityeconomymathusing,clear
3.6.3infix命令
还有一种标准化的数据,每个变量的位数是确定的,不足时,前面用0补齐,
以origin.数据的后面四个变量为例,其数据格式为
114068
128052
029076
024390
037096
115385
028536
129565
如果遇到这种数据格式,需要对照数据说明导入数据,相应的命令为:
infixgender1minority2economy3-4math5-6using,clear
其中的数字为对应的数字位数。
3.6.4outsheet命令
与前述三个命令相反,有时我们需要将STATA数据导出为其他格式数据,
比如文本格式或后缀为acs的格式:
此时需要使用outsheet命令实现,该命令的
基本格式如下。
outsheetusing
outsheetusing
此时建立的文件第一行为变量名,第2~6行为变量值。
变量列间用
Tab键分隔。
如果不希望在第一行存储变量名,则可以使用nonames选项。
如果
文件已经存在,则需要使用replace选项,相应的命令分别为。
outsheetusing,nonames
outsheetusing,nonamesreplace
3.6.4使用transfer软件
Trans