STATA入门5函数与运算符Word文件下载.docx

上传人:b****5 文档编号:16690331 上传时间:2022-11-25 格式:DOCX 页数:14 大小:27.81KB
下载 相关 举报
STATA入门5函数与运算符Word文件下载.docx_第1页
第1页 / 共14页
STATA入门5函数与运算符Word文件下载.docx_第2页
第2页 / 共14页
STATA入门5函数与运算符Word文件下载.docx_第3页
第3页 / 共14页
STATA入门5函数与运算符Word文件下载.docx_第4页
第4页 / 共14页
STATA入门5函数与运算符Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

STATA入门5函数与运算符Word文件下载.docx

《STATA入门5函数与运算符Word文件下载.docx》由会员分享,可在线阅读,更多相关《STATA入门5函数与运算符Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

STATA入门5函数与运算符Word文件下载.docx

,<

=,>

=,==,&

当不确定优先序的时候,最好用括号将优先序直接表达出来。

5.1.1代数运算

包括加(+)、减(-)、乘(*)、除(/),幂(^)和负数(-),当遇到缺失值或者运算不可行时(比如除数为零)均会得到缺失值。

例:

求正式的值,若x=4,y=2,显然经过心算,应该为:

-1

.di–(4+2^(4-2))/(2*4)//di是display命令的略写,表示显示结果

.di4-2   //输出2

.di 3*5//输出15

.di8/2    //8除以2,输出4

.di2^3  //2的立方,输出8

.di –(2+3^(2-3))/sqrt(2*3)//括号运算优先,想一想,结果应为多少?

实际上,更多的情形是两个或多个变量的直接运算。

比如,将进口车的价格都增加100元(可能是关税),而国产车不变。

.sysuseauto,clear

.gennprice=price+foreign*100

.list npricepriceforeign

 

5.1.2字符运算

加(+)号同样可用于字符运算,当加号出现在两个字符之间时,两个字符将被连成一个字符。

比如把”我爱”“STATA”合并在一起,命令为:

.scalara=”我爱”+“STATA”  //要特别注意,引号必须是半角和英文模式

.scalarlist a //scalar命令将两个字符运算后的结果赋于a,然后显示a

.scalar a=2+“3” //注意到:

字符与数值不能直接相加,显示类型不匹配

typemismatch

r(109);

5.1.3关系运算

关系运算包括大于、小于、等于;

不等于、不小于、不大于等多种比较关系。

特别要注意到STATA中的等于符号为“==”,是两个等号连写在一起,不同于赋值时用的单个等号“=”。

.di3<5 //输出结果为1,意味着3小于5为真

.di3>5//输出的结果为0,意味着3大于5为假。

当数据中含有缺失值的时候需要特别小心,因为系统缺失值大于任何一个数据,利用这一点,我们可以使用条件语句排除缺失值。

任务:

将年龄分组为65岁以下和65岁及以上两组,缺失值显然不能包括在任何一组中。

age

38

.

65

42

18

80

.clear

.edit

将上述数据复制到STATA中,然后退出数据编辑器。

.genagegrp1=(age>

=65)

生成的数据中,将缺失值视为65岁以上分在了高龄组,这是错误的

. gen agegrp2=(age>

=65)ifage<

生成的数据中,将缺失值排除在外,正确!

这一命令常被用于生成虚拟变量。

.genagegrp3=(age==65)ifage<. //仅判断是否恰好为65岁

.list //比较agegrp1、agegrp2和agegrp3的差异,体会ifage<

.的作用。

age

Agegrp1

Agegrp2

Agegrp3

65

1

18

80

5.1.4逻辑运算

逻辑运算包括非(!

),和(&)、或(|)三种,主要用于条件语句中。

列示出价格大于10000元的任何车,或者小于4000元的国产车。

.sysuseauto,clear

.list priceforeignif price>

10000| price<

4000 &

forei==0

在STATA中,和(&

)优先于或(|),因此上述命令与下面的命令等价:

.list priceforeignifprice>

10000| (price<

4000&

forei==0)

试一试下面的命令,这里列示的是国产车中价格高于10000元或者低于4000元的车。

.list priceforeignif(price>

10000|price<

4000)&

 forei==0

5.2函数概览function

函数只不过是一些编号的小程序,它会按一定的规则进行处理,之后报告结果。

实际上,谁也记不住这么多函数,因此,首先要学会查找函数的帮助,当记不住的时候,随时去查寻帮助。

记住下面的命令才是最关键的。

.helpfunction

Typeoffunction     Seehelp    

--------------------------------------+-------------------------

Mathematicalfunctions     mathfunctions 

Probabilitydistributionsand          

density functions   densityfunctions 

Random-numberfunctions   random-number functions 

Stringfunctionsstring functions  

Programmingfunctions      programming functions 

Datefunctions  datefunctions   

Time-seriesfunctions time-seriesfunctions 

Matrixfunctions      matrix functions  

弹出来的对话框告诉我们,STATA包括八类函数,分别是数学函数,分布函数,随机数函数,字符函数,程序函数,日期函数,时间序列函数和矩阵函数。

本章主要介绍数学函数和字符函数,其他函数将在后面相应的章节介绍。

常用函数一览表

函数

含义

举例

数值型函数

abs(x)

绝对值

abs(-9)=9

comb(n,k)

从n中取k个的组合

comb(10,2)=45

exp(x)

exp(0)=1

fill()

自动填充数据

int(x)

取整

int(5.6)=5, int(-5.2)= -5.

ln(x)

对数

ln

(1)=0

log10(x)

以10为底的对数

log10(1000)=3

mod(x,y)

=x-y*int(x/y)

mod(9,2)=1

round(x)

四舍五入

round(5.6)=6

sqrt(x)

sqrt(16)=4

sum(x)

求和

随机函数

uniform()

均匀分布随机数

第10讲将介绍

invnormal(uniform())

标准正态分布随机数

第11讲将介绍

字符函数

real(s)

字符型转化为数值型

string(n)

数值型转化为字符型

substr(s,n1,n2)

从S的第n1个字符开始,截取n2个字符

Substr(“this”,2,2)=is

word(s,n)

返回s的第n个字符

Work(“this”,3)=i

系统变量

_n

当前观察值的序号

_N

共有多少观察值

_pi

π

5.3数学函数mathfunctions

5.3.1三角函数,指数和对数函数

数学函数可以直接对数据进行运算,也可以对变量进行运算。

.disqrt(4)   //开方,输出2

.disqrt(6+3) //先相加,再开方,输出3

.diabs(-100) //求绝对值,输出100

.diexp

(1)   //表示e1,输出2.7182818

.di ln(exp

(2))  //先求e2,再取对数,得到2

. di _pi        //_pi为圆周率,得到3.1415927

.dicos(_pi)   //_pi的余弦值,得到-1

数学函数可以直接对数据进行运算,也可以对变量进行运算。

对变量的操作:

 clear

set obs 5

genx=_n   //生成新变量x,取值为1,2,3,4,5

 geny1=exp(x) //取指数

geny2=ln(x)  //取对数

geny3=sin(exp(x) )+cos(ln(x))//取对数

l

5.3.2取整和四舍五入

.di int(3.49) //int()取整,不论后面的小数是什么,只取小数点前的数值

. di int(3.51)   //输出3

. di int(-3.49)   //输出-3

.diint(-3.51)  //输出-3

. diround(3.49) //round()取整,四舍五入,结果为3

.diround(3.51)   //四舍五入,结果为4

.diround(-3.49)  //四舍五入,结果为-3

.di round(-3.51) //四舍五入到个位数,结果为-4

.di round(3.345,.1)  //四舍五入到十分位,结果为3.3

.diround(3.351,.1) //四舍五入到十分位,结果为3.4

.di round(3.345,.01)//四舍五入到百分位,结果为3.35

.di round(3.351,.01)   //四舍五入到百分位,结果为3.35

.diround(335.1,10)   //四舍五入到十位,结果为330

对变量的操作

.sysuseauto,clear

.gennprice=price/10000//将价格变到以万为单位

.gennprice2=round(nprice,0.01) //四舍五入到百分位

.listnprice*    //比较结果

5.3.3求和及求均值gen和egen

clear

 setobs5

genx=_n //生成新变量x,x的取值从1到5

 geny=sum(x)  //求列累积和

egenz=sum(x)//求列总和

egenr=rsum(xyz) //求x+y+z总和

egenhsum=rowtotal(x y z)  //求hsum=a+b+c

egenhavg= rowmean(x yz)//求havg=(a+b+c)/3

egenhsd=rowsd(xyz)  //求a、b和c的方差

egen rmin=rowmin(xyz)   //求xyz)三个变量的最小值

egenrmax=rowmax(xyz)//求x yz)三个变量的最大值

 list //注意比较y和z的不同。

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

egenmedx=median(x) //求列中值

egen stdx=std(x)//求列标准差

replacey=3in3

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

更多关于egen命令的用法将参考帮助:

help egen

5.3.4其他

 sysuseauto, clear

egen rmpg= rank(mpg) //求mpg的次序

sortrmpg

listmpgrank //列示结果

egenhighrep78=anyvalue(rep78),v(3/5) /*若rep78不为3、4或5,

             则为缺失值*/

listrep78highrep78

clear

inputaﻩb

10

00

1ﻩ1

0ﻩ1

00

1ﻩ.

.ﻩ0

end

egen ab=group(ab)

egenab2=group(ab),missing

ﻩa  b   abab2

ﻩ------------------

1.ﻩ10 33

2.001 1

3.ﻩ1 1  4 4

4.01 2 2

5.ﻩ0 0  1  1 

ﻩ------------------

6.1  . .  5

7..0 .6

5.4字符函数string functions

将美国汽车数据中汽车商标变量值简化为取前三个字母,得到一个新的变量make3

sysuse auto,clear

gen str3 make3=substr(make,1,3)

list make*

下表的数据是一个多选题,请把这道多选题转化为四个单选题

aﻭ

2、1、3

1、2、4

4、2、1

1、2

2

1、2

genna1=strpos(a, "

1")!

=0   //strops(s1,s2)返回字符s2在s1中的位置

gen na2=strpos(a,"2"

)!

=0

genna3=strpos(a,"

3"

=0

genna4=strpos(a,"

4"

)!

=0

list

aﻩﻩna1na2na3na4

1.2ﻩﻩ 0  1 00 

2.ﻩ2 ﻩ0 10 0

3.ﻩ1、2、3  1  1 10

4.ﻩ1、2、4  1 1  01 

5.1、2、4  1  1 0  1 

6.ﻩ1、2     1 1 0 0

7.ﻩ2  0 1 0 0

8.1、2   1   1  00

webusegenxmpl2,clear

genname2=word(name,2)//新变量name2,取值为name的第二个字母

list n*

5.5分类操作by

clear

edit

*将下表复制粘贴到STATA数据编辑器中,注意粘贴时把光标停在第一格。

x

y

1.1

1.2

1.3

2.1

2.2

genn=_n//生成一个新变量n=1,2,3,4,5

genN=_N //生成一个新变量N=5,5,5,5,5

genz=y[1]//生成一个新变量z=y的第一个观察值

l

xynN z

ﻩ-----------------------

1.1 1.1 151.1

2.ﻩ11.2 2 51.1 

3.ﻩ1 1.3  3 5  1.1

4.2 2.1451.1 

5.2 2.2 55 1.1

by x,sort:

 gen n1=_n//注意到n1与n的不同,n1按x分类进行操作

byx,sort:

genN1=_N

byx, sort:

genz1=y[1]

list

ﻩx  ynN   zn1 N1 z1

1.1 1.1  15 1.1  1 3 1.1 

2.11.2 251.12 31.1

3.ﻩ1 1.3 3 5 1.1  33 1.1

4.2  2.1 451.1 122.1 

5.2 2.2 55 1.1 2  2  2.1

下列数据为家庭成员数据family.dta,其中hhid为家庭编码,age为家庭成员的年龄。

将下表数据复制到STATA,然后另存为family.dta

hhid

86

36

57

28

40

要求:

(1)生成一个新变量hhsize,该变量表示共有多少个家庭成员。

(2)给每个家庭成员一个编码id。

如第一个家庭的第一个成员编码为11;

(3)按家庭生成一个全家成员平均年龄值mage。

(4)对每个家庭,分别按年龄大小排序,然后生成一个家庭成员代码,即家庭内年龄最小的成员代码为1,年龄最大的家庭成员,代码为nid。

最后需要生成的数据集如下:

hhid

age

hhsize

id

mage

nid

5

15

49.8

36

13

49.8

42

12

3

57

14

49.8

4

11

22

29

23

21

请自己先思考,再参考如下操作:

将上表数据复制粘贴到STATA数据编辑器,然后执行下面的命令

use family,clear

byhhid,sort:

genhhsize=_N//得到家庭规模hhsize

byhhid,sort:

genid=_n+hhid*10//为家庭成员编码

byhhid,sort:

 egenmage=mean(age) //求平均年龄

sorthhid age  //按户排序,在每个户内按年龄大小排序

by hhid:

gennid=_n//在户内按年龄大小为家庭成员编码

 +---------------------------------------+

    | hhidage hhsizeid mage nid|

  |---------------------------------------|

1. |128 51149.8 1 |

2.|  1 36  5 12 49.8  2|

3. |1  42513 49.8 3|

 4.|157 5 14  49.8 4|

5.|1 86  5 15 49.8 5 |

 |---------------------------------------|

 6. |25     3 2129 1|

7.| 240 322 29 2 |

 8. |  242 3  23   29 3 |

另一个例子:

usefamily,clear

bysort hhid(age):

gennid1=_n //括号中的变量age只排序,不参于分组。

bysorthhid age:

gen nid2=_n //hhid 和age都既用来参与排序也分组

list     //比较上面两个命令得到的不同结果

hhid  age nid1nid2

ﻩ--------------------------

1.ﻩ1  28 1 1

2.1  36   2  1

3.1  42 3   1

4.ﻩ157 4    1

5.186  5   1 

--------------------------

6.2  5  1  1 

7.2 402  1 

8.2  42  3   1

webuse stan2, clear

expand 2if transplant   //将transplant==1的观察值再复制一个

sort id

byid:

generatebyteposttran= (_n==2) /*生成一个新变量posttran,使得

            对同一个人,第一个观察值取0,第

     二个观察值取1*/

byid:

generatet1 = stime if _n==_N/*生成新变量t1,使得在同一个id下,

       对第二期取值为stime,否则为“.”

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1