Stata学习笔记 下载本文

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]

任务:下表是2005 年湖北省高考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 http://www.stata-press.com/data/r9/nlswork //从网站获取数据,或者 . webuse nlswork, clear //与前一命令等价,从STATA 官方数据库获取数据 webuse只能从http://www.stata-press.com/data这一路径获取数据,如果不是

该网站的数据,webuse失效,只能把网站地址完全写出来。使用该命令时必须确 保网络连接正常.

另一个网络数据较多的地方是波士登大学的数据中心,伍德里奇的《计量经 济学导论》一书中所使用的全部数据都可以通过该数据中心获得。比如 . use http://fmwww.bc.edu/ec-p/data/wooldridge/CEOSAL1 即打开教材中例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.70141173319*10^38 1.70141173319*10^36 +/-10^-36 4 double -8.9884656743*10^307 8.9884656743*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 天,2001 年1 月25 日为15000 天。对日期型变量的讨论将在后面的时间序

3.2.4 缺失值

没有意义的计算结果显示为”.” . display 2/0

另一种情况是,数据中含有缺失值,而STATA 默认的缺失值也用“.”来表

示。在有些数据文件中,缺失值不是用“.”或者空来表示的,而是用-9996 等