Stata命令整理

更新时间:2024-05-21 18:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Stata 命令语句格式:

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

*如果需要分别知道国产车和进口车的价格和重量,可以采用分类操作来求得, sort foreign //按国产车和进口车排序 . by foreign: sum price weight

*更简略的方式是把两个命令用一个组合命令来写。 . byforeign, 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 万元或者进口车(两个条件任满足一个) . listmake price if foreign==1 | price>10000 4、[in range]范围筛选 sum price in 1/5

注意“1/5”中,斜杠不是除号,而是从 1 到 5 的意思,即 1,2,3,4,5。

如果要计算前 10 台车中的国产车的平均价格,则可将范围和条件筛选联合使用。 . sumprice in 1/10 if foreign==0 5、[weight]加权

sum score [weight=num]其中,num为每个成绩所对应的人数 6、[, options]其他可选项

例如,我们不仅要计算平均成绩,还想知道成绩的中值,方差,偏度和峰度等*/ . sumscore, detail

. sum score, d //d 为 detail 的略写,两个命令完全等价 . list price, nohead//不要表头

Stata 数据类型转换 1、字符型转化成数值型

destring, replace //全部转换为数值型, replace 表示将原来的变量(值)更新

destringdate, replace ignore(“ ”)将字符型数据转换为数值型数据:去掉字符间的空格 destringprice percent, gen(price2 percent2) ignore(“$ ,%”)与 date 变量类似,变量 price 前面有美元符号,变量 percent 后有百分号,换为数值型时需要忽略这些非数值型字符 2、数值型转化为字符型

tostringyear day, replace //将年和日转化为字符型

gen date1=month+”/”+day+”/”+year //month day变为字符型后可以运算,将年月日构成一个新的日期变量

gen date2=date(date1,”mdy”) /* date()为日期函数,它以 1960 年 1 月 1日为第 0 天,计算从那天起直到括号中指定的某天 date1一共过了多少天。 ”mdy”指定 date1 的排列顺序,这里是按照月日年的顺序来表示日期。*/

数据显示格式

/*format 只控制数据的显示格式,并不改变内存中数据的大小。 */

变量的格式为s,表示右对齐,共 14 个字符,%为固定用法(字符变量跟s,数值变量跟g)

ormatstate %-14s // 该命令使stata的显示格式左对齐,14 前面多了个负号 format pop .0gc /*pop 的显示格式为 .0g,后面加上 c,则每三位数间 用逗号分开,c 为 comma 的意思.*/

format medage %8.1f //要求所有的medage都显示一位小数

format id .0f //对于编号,我们希望前面用零使得位数对齐,通过在前面补零,所有的 id 都成了5位数。

导入/导出其他格式数据 1、数据导入

insheet using 3origin.csv/txt, clear

insheet using 3origin.txt, double clear当数据中某个变量的位数特别长或者对导入数据的精度要求很高的时候,需要在该命令后面加 double 选项。 2、数据导出

outsheetusing myresult.asc, nonames如果不希望在第一行存储变量名,则可以使用nonames选项

outsheetusing myresult.asc, 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 longmath economy, i(id name) j(year) //数据重整,宽变长 save mylong, replace 2)长变宽 reshape wide *或者

use mylong, clear

reshape widemath economy, i(id name) j(yearr) //数据重整,长变宽 save mywide2, replace

2、多列数据转为少数几列

有些数据集虽然有很多列,但实际上只有一个变量,利用stata转化成一项数据。

stack var1-var6, into(x) clearx是新生成变量的名称 drop _stack变量stack 记录观测值原来所在行数 3、数据转置 usemath,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) //求列累积和 egenz=sum(x) //求列总和

egenavgx=mean(x) //求列均值

egenbyte dxy= diff(x y) //当x与y相等时,differ取0,若不相等为1

分离变量值 clear

input str15 x \\\

\\end

gen a=strpos(x,\ //计算出*所在的位数 gen b=substr(x,1,a-1) //取*前面的字符 gen c=substr(x,a+1,.)//取*后面的字符

stata中,系统缺失值大于任何一个数据,因此在生成分类哑变量时: genagegrp2=(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: egenmage=mean(age) //根据不同类别求平均年龄

bysorthhid (age): gen nid1=_n //括号中的变量age 只排序,不参于分组。 bysorthhid age: gen nid2=_n // hhid和ag e 都既用来参与排序也分组

encode country,gen(country1) 将文本变量转化为数值变量 display5+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如果同一文件夹下已经存有mydata.dta,而你又要再次执行 save mydata时

edit 编辑数据

log 将输出结果存放入结果文件

gen id=_n //生成一个新变量id,根据观测值排列顺序从上到下取值依次为123…… replace id=9842 in 3第三个观测的id值改变

compress //压缩数据,使之在不损失任何信息的前提下占用空间最小 erase mydata1.dta删除文件,一定要带上后缀名。

报告数据

describe 总体展示变量信息

codebook 展示数据库中的每个变量情况(有多少缺失值,主要分位数,区间) list 列示内存中的数据

count 报告共有多少观察值 inspect 报告变量的分布 table 数据列表 tabulate 联列表

append 将有相同结果的数据纵向拼接(观察值拼接) merge 将两个数据文件横向拼接 xpose数据转置 reshape

generate 生成新的数据 egen生成新的数据 rename 变量重命令 drop 删除变量或观察值 keep 保留变量或观察值

sort 对观察值按从小到大顺序重新排列 encode 数值型数据转换为字符型数据 decode 字符型数据转换为数值型数据 order 变量顺序的重新排列 by 分类操作

本文来源:https://www.bwwdw.com/article/c6f7.html

Top