admin 管理员组文章数量: 1086019
2024年4月15日发(作者:ssm框架项目实战)
Stata 命令语句格式:
[by
varlist
:] command [
varlist
] [=
exp
] [if
exp
] [in
range
] [
weight
] [,
options]
1、[by
varlist
:]
*如果需要分别知道国产车和进口车的价格和重量,可以采用分类操作来求得,
sort
foreign
//按国产车和进口车排序
. by
foreign
: sum
price weight
*更简略的方式是把两个命令用一个组合命令来写。
. by foreign, sort: sum price weight
如果不想从小到大排序,而是从大到小排序,其命令为 gsort。
. sort
- price
//按价格从高到低排序
. sort
foreign -price
/*先把国产车都排在前,进口车排在后面,然后在国产车内再按
价格从大小到排序,在进口车内部,也按从大到小排序*/
2、[=
exp
]赋值运算
. gen
nprice=price+10
//生成新变量 nprice,其值为 price+10
/*上面的命令 generate(略写为 gen) 生成一个新的变量,新变量的变量名为
nprice,新的价格在原价格的基础上均增加了 10 元。
. replace
nprice=nprice-10
/*命令 replace 则直接改变原变量的赋值, nprice 调
减后与 price 变量取值相等*/
3、[if
exp
]条件表达式
. list
make price
if
foreign==0
*只查看价格超过 1 万元的进口车(同时满足两个条件),则
. list
make price
if
foreign==1 & price>10000
*查看价格超过 1 万元或者进口车(两个条件任满足一个)
. list
make price
if
foreign==1 | price>10000
4、[in
range
]范围筛选
sum
price
in
1/5
注意“1/5”中,斜杠不是除号,而是从 1 到 5 的意思,即 1,2,3,4,5。
如果要计算前 10 台车中的国产车的平均价格, 则可将范围和条件筛选联合使用。
. sum
price
in
1/10
if
foreign==0
5、[
weight
] 加权
sum
score
[weight=num] 其中,num为每个成绩所对应的人数
6、[, options]其他可选项
例如,我们不仅要计算平均成绩,还想知道成绩的中值,方差,偏度和峰度等*/
. sum
score
, detail
. sum
score
, d //d 为 detail 的略写,两个命令完全等价
. list
price
, nohead //不要表头
Stata
数据类型转换
1、字符型转化成数值型
destring, replace //全部转换为数值型, replace 表示将原来的变量(值)更新
destring
date
, replace ignore(“ ”) 将字符型数据转换为数值型数据: 去掉字
符间的空格
destring
price percent
, gen(
price2 percent2
) ignore(“
$ ,%”
) 与 date 变量
类似,变量 price 前面有美元符号,变量 percent 后有百分号,换为数值型时需要忽略
这些非数值型字符
2、数值型转化为字符型
tostring
year day
, replace //将年和日转化为字符型
gen date1=month+”/”+day+”/”+year //month day变为字符型后可以运
算,将年月日构成一个新的日期变量
gen date2=date(date1,”mdy”) /* date()为日期函数,它以 1960 年 1 月
1日为第 0 天,计算从那天起直到括号中指定的某天 date1一共过了多少天。 ”mdy”
指定 date1 的排列顺序,这里是按照月日年的顺序来表示日期。*/
数据显示格式
/*format 只控制数据的显示格式,并不改变内存中数据的大小。 */
变量的格式为 %14s,表示右对齐,共 14 个字符,%为固定用法(字符变量跟s,数
值变量跟g)
ormat
state %-14s
// 该命令使 stata 的显示格式左对齐,14 前面多了个负号
format
pop %11.0gc
/*pop 的显示格式为 %11.0g,后面加上 c,则每三位数间
用逗号分开,c 为 comma 的意思.*/
format
medage %8.1f
//要求所有的 medage 都显示一位小数
format
id %05.0f
//对于编号,我们希望前面用零使得位数对齐,通过在前面补零,
所有的 id 都成了5位数。
导入/导出其他格式数据
1、数据导入
insheet using
/txt
, clear
insheet using
, double clear 当数据中某个变量的位数特别长或者对导
入数据的精度要求很高的时候,需要在该命令后面加 double 选项。
2、数据导出
outsheet
using
, nonames 如果不希望在第一行存储变量名,则可以
使用 nonames 选项
outsheet
using
, nonames replace 如果文件已经存在,则需要使用
replace 选项
数据合并
1、 纵向合并
use
male,
clear
//
打开记录男生信息的数据文件 male
append using
female //
将记录女生信息的 female 文件追加到当前数据集中
save
mydata1,
replace
2、 横向合并
use
economy
,clear
//
打开经济学成绩数据文件
sort
id //
按学号排序
save
economy,
replace
//
重新保存一下
use
student
,c clear
//
打开学生基本信息数据文件
sort id
//
按学号排序
merge
id
using
economy //
以学号为关联, 将学生的信息和成绩一一对应对接
tab _merge
//
显示对接情况,3 表示成功对接, 1 和 2 表示未成功对接
drop _merge
//
去掉标识对接是否成功变量_merge
Stata
很多命令可单独使用,单独使用时,一般是对所有变量进行操作,等价于后面加
上代表所有变量的
_all
数据重整
1、长宽转换
宽:
长:
1)宽变长
use
mywide,
clear
reshape long
math economy
, i(
id name
) j(
year
) //数据重整,宽变长
save mylong, replace
2)长变宽
reshape wide
*或者
use
mylong
, clear
reshape wide
math economy
, i(
id name
) j(
yearr
) //数据重整,长变宽
save
mywide2,
replace
2、多列数据转为少数几列
有些数据集虽然有很多列,但实际上只有一个变量,利用stata转化成一项数据。
stack var1-var6, into(x) clear x是新生成变量的名称
drop _stack 变量stack 记录观测值原来所在行数
3、数据转置
use math,clear
xpose, clear
变量运算:
Stata中,加( +)号同样可用于字符运算,当加号出现在两个字符之间时,两个字
符
将被连成一个字符。比如把”我爱” “STATA”合并在一起,命令为:
. scalar a=”我爱” +“STATA”
一些运算函数:
comb(n,k) 从 n 中取 k 个的组合
fill() 自动填充数据
int(x) 取整
log10(x) 以 10 为底的对数
mod(x,y) 求余数
round(x) 四舍五入
di
round(3.345,.1)
//四舍五入到十分位,结果为 3.3
di
round(3.345,.01)
//四舍五入到百分位,结果为 3.35
di
round(335.1,10)
//四舍五入到十位,结果为 340
sqrt(x) 开更号
substr(s,n1,n2) 从 S 的第 n1 个字符开始,截取 n2 个字符
word(s,n) 返回 s 的第 n 个字符
_n 当前观察值的序号
_N 共有多少观察值
gen
y
=sum(
x
) //求列累积和
egen
z
=sum(
x
) //求列总和
egen
avgx
=mean(
x
) //求列均值
egen
byte dxy
= diff(
x y
) //当x与y相等时,differ取0,若不相等为1
分离变量值
clear
input str15 x
"10*123"
"543*21"
"12*422"
"43532*32134"
"4349*1"
end
gen a=strpos(x,"*") //计算出*所在的位数
gen b=substr(x,1,a-1) //取*前面的字符
gen c=substr(x,a+1,.) //取*后面的字符
stata中,系统缺失值大于任何一个数据,因此在生成分类哑变量时:
gen
agegrp2=(age>=65) if age<.
生成的数据中, 将缺失值排除在外
生成分组变量:
clear
set obs 100 //设定 100 个观察值
gen age=_n //生成一个假设的年龄变量 age,依次取 1, 2, …, 100
recode age (min/30=1) (30/60=2) (60/max=3),gen(agegrp) /*生成新的分组
变量agegrp, 当年龄age在30及以下时取值为 1,30到60为2,60以上为3*/
分组运算:
by
x
, sort: gen
n1
=_n 根据x的不同,生成n1变量对不同类的x计数
by
hhid
,sort: egen
mage
=mean(
age)
//根据不同类别求平均年龄
bysort
hhid (age)
: gen
nid1
=_n //括号中的变量
age
只排序,不参于分组。
bysort
hhid age
: gen
nid2
=_n //
hhid
和
ag e
都既用来参与排序也分组
encode country, gen(country1) 将文本变量转化为数值变量
display
5+9 显示计算结果
sum
price weight 描述统计:
求价格和重量的观察值个数、平均值、标准差、最小
值和最大值
scatter
price weight
绘出价格和重量的散点图
line
price weight, sort
绘出价格和重量的折线图
clear 清除内存中原有内容
cd
d:/stata9
在打开数据之前,先定位数据的位置
use 打开 STATA 格式的数据文件
set obs 5 //设定 5 个观察值
dir 查看当前路径下有哪些文件
save
mydata
//保存数据,数据文件名为 mydata
save
mydata
, replace 如果同一文件夹下已经存有 ,而你又要再次执
行 save mydata 时
edit 编辑数据
log 将输出结果存放入结果文件
gen
id=_n
//生成一个新变量id,根据观测值排列顺序从上到下取值依次为123……
replace
id=9842
in
3
第三个观测的id值改变
compress //压缩数据,使之在不损失任何信息的前提下占用空间最小
erase
删除文件,一定要带上后缀名。
报告数据
describe 总体展示变量信息
codebook 展示数据库中的每个变量情况(有多少缺失值,主要分位数,区间)
list 列示内存中的数据
count 报告共有多少观察值
inspect 报告变量的分布
table 数据列表
tabulate 联列表
append 将有相同结果的数据纵向拼接(观察值拼接)
merge 将两个数据文件横向拼接
xpose 数据转置
reshape
generate 生成新的数据
egen 生成新的数据
rename 变量重命令
drop 删除变量或观察值
keep 保留变量或观察值
sort 对观察值按从小到大顺序重新排列
encode 数值型数据转换为字符型数据
decode 字符型数据转换为数值型数据
order 变量顺序的重新排列
by 分类操作
版权声明:本文标题:Stata命令整理 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1713180800a622788.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论