除以下字符不能用作变量名外,任何字母、字母与数字(单独的数字也不允许)组合均可用做 变量名:
_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]
任务:下表是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 通常把变量划分为三类:分别是数值型,字符型和日期型