资源描述
如下命令均采用小写字母
Chapter 1 stata入门
1.1打开数据
use "D:\Stata9\auto.dta",clear 用use命令打开数据
sysuse auto,clear auto 为系统数据 sysuse为打开系统数据命令
1.2获取协助
Help summarize summarize为需要获取协助对象 可以改为其她需要协助对象
Findit summarize,net 寻找网络协助 summarize为需要获取协助对象
Search summarize ,net 寻找网络协助 summarize为需要获取协助对象
显示成果
Display 5+9
1.3描述记录(summarize 可简写成sum)
Use atuo,clear
Summarize price 描述price观测值个数、平均值、原则差、最小值、最大值
Sum weight summarize可简写成sum
Sum weight price 同步完毕上面两步
1.4绘图
Scatter price weight scatter 为绘制散点图命令
Line price weight ,sort line 为绘制折线图命令,sort为排序,绘制折线图前需要先排序
1.5生成新数据(generate 可简写成gen)
Clear
Set obs 1000 设立观测值组数
Gen x=_n _n 为观测值得序号
Gen y=x+100
1.6控制成果输出显示
List n
1.7设立屏幕滚动
Set more off 先设立此项 则显示时,屏幕不断止
Set more on 先设立此项 则显示时,会使显示停止
1.8清除内存中原有内容
clear
1.9设立文献存取途径(cd)
Cd d:\stata d:\stata为途径
1.10如果想懂得当前程径下有哪些文献,可以用dir 命令来列示
.dir
1.11假设你想在D 盘根目录下创立一种新文献夹mydata 来存储数据文献,
命令为mkdir。
mkdir d:\mydata
1.12错误提示
List myvar
上述命令试图显示变量myvar,但是成果窗口仅浮现如下显示
variable myvar not found
r(111);
红色信息表白,没有找到一种叫myvar 变量,确,咱们数据中并没有
这个变量。List 巧妇难为无米之炊。
红色信息下面尚有一种天兰色 r(111),用鼠标点击,即可弹进一种协助信
息框,给出错误更详尽解释。
再例如,咱们在求五数概略时,误把 sum 写成了sun
. sun
unrecognized command:sun
r(199);
显示说不结识sun 这个命令。
附录:常用命令
Chapter2命令语句
2.1 掌握命令语句格式
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
注:[ ]表达可有可无项,显然只有command 是必不可少,下面结合例子分
项来解说命令各个构成某些。
2.2 命令command
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
. cd d:/stata9
. use auto,clear //打开美国汽车数据文献auto.dta,背面clear 表达先清除内存中也许存在数据集
. summarize /*诸多命令可单独使用,单独使用时,普通是对所有变量进
行操作,等价于背面加上代表所有变量_all。 */
. summarize _all /注意到该命令输出成果与上一种命令完全同样
. sum //与前一命令等价,sum 为summarize 略写
. su su 是summarize 最简化略写,不能再简化为s
. s //简写前提是不引起混淆。执行这个命令将浮现错误信息
unrecognized command:s
2.3 变量varlist
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
varlist 表达一种变量,或者各种变量,各种变量之间用空格隔开。
. cd d:/stata9
. use auto,clear
. sum price //求价格观测值个数,平均值,方差,最小值和最大值
. su p //变量和命令均可略写,注意到两个成果完全同样
. su t //分数据中有两个变量开首字母为t(trunk 和turn),因此
STATA 以为t 为模糊省略。
m ambiguous abbreviation /红色为错误信息
. sum tr tu //求trunk 和turn 变量五数概略记录
变量名称
除如下字符不能用作变量名外,任何字母、字母与数字(单独数字也不容许)组合均可用做
变量名:
_all _b byte _coef _cons double float if in int long _n _N _pi _pred _rc _se _skip using with
基本规定如下:
_ 第一种字元可以是英文字母或,但不能是数字;
_ 最多只能涉及32 个英文字母、数字或下划线;
_ 由于STATA 保存了诸多以“_ “开头内部变量,因此最佳不要用为第一种字元来
定义变量。
2.4 分类操作by varlist
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
如果需要分别懂得国产车和进口车价格和重量,可以采用分类操作来求得,
. cd d:/stata9
. use auto,clear
. by foreign:sum price weight //分别计算国产车和进口车价格和重量
但如果执行下面两个命令,将浮现错误*/
. sort price //按价格从低到高重新排序
. by foreign:sum price weight
*not sorted
/* 系统提示没有排序,这是由于by varlist 在执行时规定内存中数据是按照
by 背面变量排序。当咱们用sort price 重新排序后,就打乱了本来按照
foreign 排序,因此浮现了错误提示。改正办法是:*/
. sort foreign //按国产车和进口车排序
. by foreign:sum price weight
*更简略方式是把两个命令用一种组合命令来写。
. by foreign,sort:sum price weight
如果不想从小到大排序,而是从大到小排序,其命令为 gsort。
.gsort - price /按价格从高到低排序
. gsort foreign –price /*先把国产车都排在前,进口车排在背面,然后在国产车内再按价格从大小到排序,在进口车内部,也按从大到小排序*/
2.5 赋值及运算=exp
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
例:生成一种新价格变量nprice,该变量取值为原汽车价格变量price 基本上涨10 元
. cd d:/stata9
. use auto,clear
. gen nprice=price+10 //生成新变量nprice,其值为price+10
. list price nprice //比较一下两个变量取值
/*上面命令generate(略写为gen) 生成一种新变量,新变量变量名为
nprice,新价格在原价格基本上均增长了10 元。
. replace nprice=nprice-10 /*命令replace 则直接变化原变量赋值,nprice 调减后与price 变量取值相等*/
. list price nprice //再比较一下两个变量,相等。
2.6 条件表达式if exp
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
例:若只想查看国产车品牌和价格,则加入筛选条件if foreign==0 */
. cd d:/stata9
. use auto,clear
. list make price if foreign==0
*只查看价格超过1 万元进口车(同步满足两个条件),则
. list make price if foreign==1 & price>10000
*查看价格超过1 万元或者进口车(两个条件任满足一种)
. list make price if foreign==1 | price>10000
*分类型查看价格超过1 万元汽车品牌和价格
. by foreign,sort:list make price if price>10000
2.7 范畴筛选in range
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
如果要计算较低前10 台车平均价格,则要先按价格排序,然后仅对前10
个车价格求平均值
. cd d:/stata9
. use auto,clear
. sort price
. sum price in 1/5
注意“1/5”中,斜杠不是除号,而是从1 到5 意思,即1,2,3,4,5。
如果要计算前10 台车中华人民共和国产车平均价格,则可将范畴和条件筛选联合使用。
. sum price in 1/10 if foreign==0
2.8 加权weight
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
任务:下表是 年湖北省高考640 分及以上成绩一分一段人数记录,第一
列score 为高考分数,第二列num 为该分数段人数。当前咱们规定640 分及以
上考生平均分数。
score num
650 193
649 26
648 23
647 16
646 21
645 26
644 32
643 23
642 38
641 29
640 38
操作:
先将上面表格复制,然后进入STATA,执行如下命令
. clear //清空STATA
. edit
然后把光标定位在表格第一行第一列,点右键,选取粘贴(paste),上表数
据便被复制到STATA 中,退出数据编辑器
sum score //思考:得到成果是640 分及以上考生平均分吗?
简朴地使用sum 命令得到平均成绩显然是不对的,由于各个分数下人数是
不同样,对的计算需要加权,加权办法是
. sum score [weight=num] / *加权计算,比较该成果与sum score 区别,
事实上,不用权重选项时,相称于权重相等。*/
. sum score [w=n] //w 为weight 略写,n 为num 简写,两命令等价
2.9 其她可选项,options
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [,options]
许多命令均有某些可选项
例如,咱们不但要计算平均成绩,还想懂得成绩中值,方差,偏度和峰度等*/
. sum score,detail
. sum score,d //d 为detail 略写,两个命令完全等价
注意,成果中显示了 1%,5%等分位数,意思是把变量从小到大排序,第1%位置
处取值是多少,第10%位置上取值是多少。显然,50%位置处取值是中
位数。此外,加了detail 选项后,还得到最小前5 个数,最大5 个数,以
及峰度和偏度等。
*再如,list 命令也有某些可选项
. cd d:/stata9
. use auto,clear
. list price in 1/30,sep(10) //每10 个观测值之间加一横线
. list price in 10/30,sep(2) //每2 个观测值之间加一横线
. list price,nohead //不要表头
Chapter3 数据
3.1 打开示例数据和网络数据:use
3.1.1 示例数据
示例数据为STATA 协助文献中所用数据,其后辍名为.dta,如果在STATA
软件当前程径下,直接用use 命令即可打开;如果不在当前程径下,则可以使用
sysuse 命令打开。
. use auto,clear //打开汽车数据auto.dta
. cd d:/ //变化途径到d:/
. use auto,clear
file auto.dta not found //系统提示无法找到文献,由于auto.dta 不在d:/
r(601);
. sysuse auto,clear //无论当前程径是什么,该命令均能打开系统自带文献
3.1.2 从网络获取数据
上述示例数据也许没有所有下载到你所用电脑中,因而简朴地使用use
和sysuse 命令时,也许浮现错误,如
. use nlswork,clear
file nlswork.dta not found
此时,如果拟定该数据为示例数据,可以直接通过网络获取,其命令为:
. use //从网站获取数据,或者
. webuse nlswork,clear //与前一命令等价,从STATA 官方数据库获取数据
webuse只能从,如果不是
该网站数据,webuse失效,只能把网站地址完全写出来。使用该命令时必要确
保网络连接正常.
另一种网络数据较多地方是波士登大学数据中心,伍德里奇《计量经
济学导论》一书中所使用所有数据都可以通过该数据中心获得。例如
. use
即打开教材中例2.3 中所使用CEO 数据。
use 命令只能打开后辍名为“*.dta”格式数据,.dta 格式以外数据,STATA
不能直接读取,需要从外部读入,最简朴而直接办法是复制和粘贴。但是有时
没有其她软件,例如,咱们有SAS 格式或SPSS 格式数据,但没有SAS 软件
和SPSS 软件,此时需要用STATA 提供其她命令或者使用transfer 数据格式转
化软件。在讨论其她输入或导入数据办法之前,咱们先来学习一点数据类型
知识。
3.2 数据类型
STATA 普通把变量划分为三类:分别是数值型,字符型和日期型
3.2.1 数值变量:
用0、1、2…9 及+、–(正负号)与小数点“(.)”来表达。在输入数据时,
逗号不能被辨认,如1,024 应当直接写成1024.
5
-5
5.2
5.2e+3
5.2e-2
背面两个数据为科学计数法数据,分别表达5200 和0.052.其中e 相称
于10,因而5.2e+3 意思是:5.2*103=5200
数值型变量按其精度区别,又有五种类型,分别是:
存贮类型 最小 最大 0-领域 字节
---------------------------------------------------------------------
byte -127 100 +/-1 1
int -32,767 32,740 +/-1 2
long -2,147,483,647 2,147,483,620 +/-1 4
float -1.*10^38 1.*10^36 +/-10^-36 4
double -8.*10^307 8.*10^307 +/-10^-323 8
当运算精度规定很高时候,需要将变量设立成浮点型或双精度型。
另注意1 和1.0000 精度是不同,前者在(0.5,1.5)区间内近似,而后者在
(0.99995,1.00005)区间内近似。若多次运算重复取四舍五入,精度较低时将使
计算误差迅速变大,然而,精度高时占用内存资源较多。下面命令有助于理
解变量存贮类型变换。
. clear
. set obs 1 //将设定一种观测值
obs was 0,now 1 //提示信息说,之前系统中没有观测单位,当前有了一种
. gen a=1 //生成一种新变量a,令a 取值为1
. d /*d 为describ 命令略写,describ 命令显示数据集
属性信息,注意观测显示成果中,a storage type 为float 型,
浮点型为默认类型*/
Contains data
obs:1
vars:1
size:8 (99.9% of memory free)
storage display value
variable name type format label variable label
a float %9.0g
Sorted by:
Note:dataset has changed since last saved
. compress //在不损害信息基本上压缩,使数据占用空间尽量小
a was float,now byte //a 由浮点型变为了字节型
. d // 注意a storage type 当前为byte 型
. replace a=101 /* 注意a storage type 当前自动升为int 型,
由于byte 最大只能为100*/
a was byte now int
(1 real change made)
. replace a=100
. compress
. d //重新变回到byte 型
. replace a=32741 //直接变到long 型,由于int 型最大只能到32740
. gen double b=1 //直接生成双精度变量b
. recast double a //将a 变成双精度变量b
. d //注意到a 和b 均为双精度型
3.2.2 字符串变量
字符变量普通是某些身份信息,如姓名,地名。此外,定类变量也可以用字
符变量来表达,如性别分为“男”和“女”。
字符串变量由字母或某些特殊符号构成(如地名〈籍贯〉变量,迁出地,
住址,职业等等)。字符串变量也可以由数字来构成,但数字在这里仅代表某些
符号而不再是数字。字符串变量普通以引号“”注标,并且引号普通不被视同为
字符一某些,注意这里引号必要是英文输入状态下引号。
字符串最多可以达244 个字符。普通用str#来表达字符多少,如str20
表达将有20 个字符。普通三个中文字姓名需要6 个字符。
字符型示例
“String”
“string”
” string”
”string ”
”” //特殊字符串,表达空字符,缺失值。
” ” //注意与空字符串区别,具有一种空格
”125.27” //”125.27”由于有双引号,将被视同为字符而非数值。
“$2,343.68”
“I love you”
“旺材是条狗”
注意前四个字符串均不相似,大小写是不同样,有无空格及空格位置不
同,都表达不同字符串。对于”125.27”这样数值型字符串,可以用real()
函数或者destring 命令转化成数值型变量。详细操作见3.3.1。
3.2.3 日期型变量
在STATA 中,1960 年1 月1 日被以为是第0 天,因而1959 年12 月31 日为
第-1 天, 年1 月25 日为15000 天。对日期型变量讨论将在背面时间序
3.2.4 缺失值
没故意义计算成果显示为”.”
. display 2/0
另一种状况是,数据中具有缺失值,而STATA 默认缺失值也用“.”来表
示。在有些数据文献中,缺失值不是用“.”或者空来表达,而是用-9996 等
来表达,如果要将其所有替代为“.”,或者反之,将“.”替代为-9996,命令
为:
. mvencode age,mv(-9996)
. mvdecode age,mv(-9996)
3.3 数据类型转化
任务:将 destring1,destring2 和tostring 中数据类型进行互相转化
*3.3.1 字符型转化成数值型:destring
*destring1数据中数据全为字符型,转换为数值型
.webuse destring1,clear
.des /*注意到所有变量存贮类型(storage type)均为字符型str#,
其中#号表达字符串长度*/
Contains data from
obs:10
vars:5 3 Mar 10:15
size:240 (99.9% of memory free)
storage display value
variable name type format label variable label
id str3 %9s
num str3 %9s
code str4 %9s
total str5 %9s
income str5 %9s
.sum //由于所有变量为字符型,因此不能进行数值计算
.gen nincom=incom+10 //因字符不能进行四则运算,不能进行加法运算
*type mismatch //系统提示类型不匹配,由于income 为字符型,10 为数值型
.destring,replace //所有转换为数值型,replace 表达将本来变量(值)更新
.sum //注意到转换为数值型后,可以求五数概略了
.gen nincom=income*1.3 //转换后,可以运算,工资终于涨了30%!
.list nincom income //工资终于涨了30%!
*----------------将字符型数据转换为数值型数据:去掉字符间空格------------
*destring2 数据集中data 变量为字符型,且年月日间有空格,转移为数据型
.webuse destring2,clear
.des //注意到所有变量均为字符型 str
.list date //注意到date 年月日之间均有空格
date
------------
1. 1999 12 10
2. 07 08
3. 1997 03 02
4. 1999 09 00
.destring date,replace //想把date 转换成数值型,但失败了,系统提示说
*date contains non-numeric characters;no replace /*由于具有非数值型字符
(即空格),因而没有更新,也即转换命令没有执行。*/
.destring date,replace ignore(“ ”) /*忽视空格,然后转换,注意这里” “中间有一种空格,不是””。*/
date:characters space removed;replaced as long //成功转换为long 型
.des //注意到date storage type 已变为long
.list date //注意到空格消失了
date
----------
1. 19991210
2. 0708
3. 19970302
/*与date 变量类似,变量price 前面有美元符号,变量percent 后有百分号,
换为数值型时需要忽视这些非数值型字符。*/
.destring price percent,gen(price2 percent2) ignore(“$ ,%”)
.list //注意到price2 前面$号消失,percent2 背面%号消失
date price price2 percent percent2
---------------------------------------------------------
1. 19991210 $2,343.68 2343.68 34% 34
2. 0708 $7,233.44 7233.44 86% 86
.d //注意到price2 和percent2 均变为数据值型变量double 和byte
*3.3.2 数值型转化为字符型:tostring
.webuse tostring,clear /*该数据中年月日数据类型不同样,不能直接相加
生成一种反映日期新变量*/
.des //注意到month 为字符型,而年和日为数值型
.list
.gen date1=month+”/”+day+”/”+year //将年月日构成一种新日期变量
type mismatch //由于month 为字符型,年和日为数值型,不同类型不能相加
r(109);
.tostring year day,replace //将年和日转化为字符型
.des //注意到,当前所有变为字符型
.gen date1=month+”/”+day+”/”+year //将年月日构成一种新日期变量
.list //生成了一种新变量date1,其为三个字符串和两个”/”符号连接而成
.gen date2=date(date1,”mdy”) /* date()为日期函数,它以1960 年1 月1
日为第0 天,计算从那天起直到括号中指定某天date1
一共过了多少天。”mdy”指定date1 排列顺序,这里是
按照月日年顺序来表达日期。*/
.list //新生成date2 表达总天数
*小游戏:请算算你活了多少天?示例:一种生于1975 年12 月27 日家伙,
她活了?
.di date(“1975/12/27”,”ymd”)
3.4 数据显示格式:format
/*format 只控制数据显示格式,并不变化内存中数据大小。*/
.webuse census10,clear //美国人口普查数据
.des //第三列显示了数据格式display format
storage display value
variable name type format label variable label
state str14 %14s State
region int %8.0g cenreg Census region
pop long %11.0g Population
medage float %9.0g Median age
*注意到,stata 变量格式为%14s,表达右对齐,共14 个字符,%为固定用法
.list in 1/4 //注意不同显示格式:均为右对齐
state region pop medage
------------------------------------------
1. Alabama South 3893888 29.3
2. Alaska West 401851 26.1
3. Arizona West 2718215 29.2
4. Arkansas South 2286435 30.6
.format state %-14s // 该命令使stata 显示格式左对齐,14 前面多了个负号
.list in 1/4 //注意不同显示格式,state 当前左对齐了
+------------------------------------------+
state region pop medage
------------------------------------------
1. Alabama South 3893888 29.3
2. Alaska West 401851 26.1
3. Arizona West 2718215 29.2
4. Arkansas South 2286435 30.6
.format region %-8.0g / *region 变量看起来是字符型变量,但事实上为
数据型,它也可以左对齐,同样是加一种负号.
.list in 1/4 //注意region 当前左对齐了
.format pop %11.0gc /*pop 显示格式为%11.0g,背面加上c,则每三位数间
用逗号分开,c 为comma 意思.*/
.list in 1/4 //成果加上了逗号,但是第五个观测值没有任何变化
state region pop medage
-------------------------------------------
1. Alabama South 3,893,888 29.3
2. Alaska West 401,851 26.1
3. Arizona West 2,718,215 29.2
4. Arkansas South 2,286,435 30.6
5. California West 23667902 29.9
*由于这个数太大,加逗号将超过11 位数,咱们可以先把总位数增长
.format pop %12.0gc //把pop 显示总长度数增长到12 位
.list in 5 //当前所有pop 都按逗号分开了
5. California West 23,667,902 29.9
.format medage %8.1f //规定所有medage 都显示一位小数
.list in 1/4
state region pop medage
--------------------------------------------
1. Alabama South 3,893,888 29.3
2. Alaska West 401,851 26.1
3. Arizona West 2,718,215 29.2
4. Arkansas South 2,286,435 30.6
.gen id=_n //生成一种新变量id,取值依次为1,2,3
.replace id=9842 in 3 //将id 第三个变量替代为9842
.list in 1/3
state region pop medage id
--------------------------------------------
1. Alabama South 3893888 29.3 1
2. Alaska West 401851 26.1 2
3. Arizona West 2718215 29.2 9842
.format id %05.0f //对于编号,咱们但愿前面用零使得位数对齐
.list in 1/3 //注意到通过在前面补零,所有id 都成了5 位数。
state region pop medage id
--------------------------------------------------
1. Alabama South 3893888 29.3 00001
2. Alaska West 401851 26.1 00002
3. Arizona West 2718215 29.2 09842
3.5 在STATA 中直接录入数据:input
3.5.1 菜单式操作
任务:按学号录入五个学生经济学成绩
id economy
1 40
2 80
3 90
4 70
5 53
操作:(1)点击图标>>在打开数据表格第一列中录入五个姓名>>在第二列中录入另五个成绩
双击 var1 弹出对话框>>将变量改名为id>>在label 中写入学号>>退出弹出窗口;
双击 var2 弹出对话框>>将变量改名为name>>在label 中写入姓名>>关闭数据编辑器
(2)点击图标保存数据>>给数据命令为student >>退出
在建立数据文献后,如果没有存盘,这个文献即是一种“暂时”数据文献,它将随着退出STATA 系统时而消失。当数据文献被存储在后,它将成为一种“永久性”数据文献,顾客可以在后来经常使用它而不必重新建立之。
3.5.2 命令操作
任务:按学号录入五个学生学号和姓名
id name economy
1 John 40
2 Chris 80
3 Jack 90
4 Huang 43
5 Tom 70
操作:在command 窗口中键入(注:前面点号不必健入,每完毕一行按
展开阅读全文