Chapter1——STATA命令语句

Chapter1——STATA命令语句

0. 命令语句通式

[by varlist:] command [varlist][=exp][if exp][in range][weight][,options]

[ ]表示的是可有可无的项,只有command是必不可少的部分

1. 命令command

sysuse auto.dta,clear
*描述汇总观察值的个数、平均值、方差、最大值和最小值
summarize 
list

2. 变量varlist

varlist表示的是在这个command运行下一个或者多个变量,多个变量之间用空格隔开

sysuse auto.dta,clear
*对price和make两个变量进行汇总描述
summarize price make

变量名称命名要求:

  1. 第一个字母可以是英文字母,但是不可以是数字
  2. 最多只能包括32个英文字母、数字或下划线
  3. Stata保留了很多以"_"开头的内部命令和变量,所以最好不要用下划线作为第一个字母来定义变量
  4. 以下字符不可以用作变量名外,任何字母、字母和数字的组合(单独的数字不被允许)均可用作变量名。_all、 _b、 _byte _coef、 _cons、double、 float、if、in、int、long、_n、 _N、 _pi、 _pred、 _rc、 _see、 _skip、using with

3. 分类操作by varlist

auto.dta的数据集中,有一个变量是foreign,该变量表示的是某个车是进口车Foreign=1,还是国产车Domestic=0。如果我们需要知道车的平均价格和重量:

sysuse auto.dta,clear
sum price weight
*对整个数据集中二分类变量分开,分别做sum
by foreign: sum price weight
*利用sort对price进行排序且分类,会报错(错误做法)
sort price
by foreign: sum price weight
*应该是先分类后再排序才是正确做法
by foreign,sort: sum price weight

sort的用法:对数据集中某个变量的定量数据进行排序,只能对数据进行从低到高的排序

gsort的用法: Ascending and descending sort,可以设置+-进行升序和降序的排列

*syntax:
sort varlist [in] [, stable]
gsort [+|-] varname
*对数据进行升序排列
sort price
gsort +price
*对数据进行降序排列
gsort -price

4. 赋值及运算=exp

改选先主要用于给新变量复制或者替换原变量的值,例如:生成一个新的价格变量,该变量的取值为原汽车价格变量price的基础上加10元

sysuse auto.dta,clear
*生成一个新的变量nprice,然后给赋值为price+10,然后对price和新生成的nprice进行list
gen nprice=price+10
list price nprice
*使用replace对nprice的变量进行替换为nprice-10,然后对price和替换后的nprice进行list
replace nprice=nprice-10
list price nprice

5. 条件表达式if exp

如果只想要查看auto.dta中的国产车的品牌和价格,则需要加入筛选条件if foreign==

*只查看国产车的价格和品牌
list make price if foreign==0
*只看价格超过10000元的进口车(需要满足两个条件)
list make price if foreign==1&price>10000
*只看价格超过10000元或者是进口的车(两个条件只需要满足一个)
list make price if foreign==1|price>10000
*分类型查看价格超过10000元的汽车的品牌和价格
by foreign:list make price if price>10000

6. 范围筛选in range

如果想要价格较低的前十台车的平均价格,则需要先按照价格排序,然后使用in对价格从升序的前十辆车的价格求平均值

sort price
list price in 1/10
sum price in 1/10
*要计算前十台车中国产车的平均价格
sum price in 1/10 if foreign==0

7. 加权weight

下表是 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
clear
*打开数据编辑器
edit
*此时对各个分数段的成绩赋予相同的权重求平均值
sum score
*以每个分数段先的人数作为该分数的权重,来加权求平均值
sum score[weight=num]

8. 其他可选项,options

许多命令都会有一些可选项,可以对数据进行一个更加细致的描述和统计分析

sum score,detail
sysuse auto.dta,clear
*对前10个数据的观察值每10个添加一个横线
list price in 1/30,sep(10)
*对10~30个数据的观察值每2个添加一个横线
list price in 10/30,sep(2)
*不要表头
list price,nohead