STATA入门5函数与运算符.docx
《STATA入门5函数与运算符.docx》由会员分享,可在线阅读,更多相关《STATA入门5函数与运算符.docx(13页珍藏版)》请在冰豆网上搜索。
STATA入门5函数与运算符
5函数与运算符
5.1运算符exp
STATA共有四种运算,分别是代数运算、字符运算、关系运算和逻辑运算。
运算符一览表
代数运算
逻辑运算
比较关系
+
加
!
不
>
大于
-
减
~
不
<
小于
*
乘
|
或
>=
不小于
/
除
&
和
<=
不大于
^
指数
==
等于
sqrt()
开方
!
=
不等于
~=
不等于
~=
不等于
+
字符相加
运算的优先序:
!
(或~),^,-(负号),/,*,-(减),+,!
=(或~=),>,<,<=,>=,==,&,|
当不确定优先序的时候,最好用括号将优先序直接表达出来。
5.1.1代数运算
包括加(+)、减(-)、乘(*)、除(/),幂(^)和负数(-),当遇到缺失值或者运算不可行时(比如除数为零)均会得到缺失值。
例:
求正式的值,若x=4,y=2,显然经过心算,应该为:
-1
.di–(4+2^(4-2))/(2*4)//di是display命令的略写,表示显示结果
.di4-2//输出2
.di3*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
.listnpricepriceforeign
5.1.2字符运算
加(+)号同样可用于字符运算,当加号出现在两个字符之间时,两个字符将被连成一个字符。
比如把”我爱”“STATA”合并在一起,命令为:
.scalara=”我爱”+“STATA”//要特别注意,引号必须是半角和英文模式
.scalarlista//scalar命令将两个字符运算后的结果赋于a,然后显示a
.scalara=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岁以上分在了高龄组,这是错误的
.genagegrp2=(age>=65)ifage<.
生成的数据中,将缺失值排除在外,正确!
这一命令常被用于生成虚拟变量。
.genagegrp3=(age==65)ifage<.//仅判断是否恰好为65岁
.list//比较agegrp1、agegrp2和agegrp3的差异,体会ifage<.的作用。
age
Agegrp1
Agegrp2
Agegrp3
38
0
0
0
.
1
.
.
65
1
1
1
42
0
0
0
18
0
0
0
80
1
1
0
5.1.4逻辑运算
逻辑运算包括非(!
),和(&)、或(|)三种,主要用于条件语句中。
例:
列示出价格大于10000元的任何车,或者小于4000元的国产车。
.sysuseauto,clear
.listpriceforeignifprice>10000|price<4000&forei==0
在STATA中,和(&)优先于或(|),因此上述命令与下面的命令等价:
.listpriceforeignifprice>10000|(price<4000&forei==0)
试一试下面的命令,这里列示的是国产车中价格高于10000元或者低于4000元的车。
.listpriceforeignif(price>10000|price<4000)&forei==0
5.2函数概览function
函数只不过是一些编号的小程序,它会按一定的规则进行处理,之后报告结果。
实际上,谁也记不住这么多函数,因此,首先要学会查找函数的帮助,当记不住的时候,随时去查寻帮助。
记住下面的命令才是最关键的。
.helpfunction
TypeoffunctionSeehelp
--------------------------------------+-------------------------
Mathematicalfunctionsmathfunctions
Probabilitydistributionsand
densityfunctionsdensityfunctions
Random-numberfunctionsrandom-numberfunctions
Stringfunctionsstringfunctions
Programmingfunctionsprogrammingfunctions
Datefunctionsdatefunctions
Time-seriesfunctionstime-seriesfunctions
Matrixfunctionsmatrixfunctions
弹出来的对话框告诉我们,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
.diln(exp
(2))//先求e2,再取对数,得到2
.di_pi//_pi为圆周率,得到3.1415927
.dicos(_pi)//_pi的余弦值,得到-1
数学函数可以直接对数据进行运算,也可以对变量进行运算。
对变量的操作:
clear
setobs5
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取整和四舍五入
取整
.diint(3.49)//int()取整,不论后面的小数是什么,只取小数点前的数值
.diint(3.51)//输出3
.diint(-3.49)//输出-3
.diint(-3.51)//输出-3
四舍五入
.diround(3.49)//round()取整,四舍五入,结果为3
.diround(3.51)//四舍五入,结果为4
.diround(-3.49)//四舍五入,结果为-3
.diround(-3.51)//四舍五入到个位数,结果为-4
.diround(3.345,.1)//四舍五入到十分位,结果为3.3
.diround(3.351,.1)//四舍五入到十分位,结果为3.4
.diround(3.345,.01)//四舍五入到百分位,结果为3.35
.diround(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(xyz)//求hsum=a+b+c
egenhavg=rowmean(xyz)//求havg=(a+b+c)/3
egenhsd=rowsd(xyz)//求a、b和c的方差
egenrmin=rowmin(xyz)//求xyz)三个变量的最小值
egenrmax=rowmax(xyz)//求xyz)三个变量的最大值
list//注意比较y和z的不同。
egenavgx=mean(x)//求列均值
egenmedx=m