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 分类操作


本文标签: 数据 变量 价格 字符