当前位置:文档之家› STATA入门5-函数与运算符

STATA入门5-函数与运算符

5函数与运算符5.1运算符expSTATA 共有四种运算,分别是代数运算、字符运算、关系运算和逻辑运算。

运算的优先序:!(或~),^,-(负号),/,*,-(减),+,!=(或~=),>,<,<=,>=,==,&,| 当不确定优先序的时候,最好用括号将优先序直接表达出来。

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

例:求正式的值,若x=4,y=2,显然经过心算,应该为:-1xyy x y x -+-. di –(4+2^(4-2))/(2*4) //di 是display 命令的略写,表示显示结果. di 4-2 //输出2 . di 3*5 //输出15. di 8/2 //8除以2,输出4 . di 2^3 //2的立方,输出8 . di –(2+3^(2-3))/sqrt(2*3) //括号运算优先,想一想,结果应为多少?实际上,更多的情形是两个或多个变量的直接运算。

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

. sysuse auto, clear. gen nprice=price+foreign*100 . list nprice price foreign5.1.2字符运算加(+)号同样可用于字符运算,当加号出现在两个字符之间时,两个字符将被连成一个字符。

比如把”我爱”“STATA”合并在一起,命令为:. scalar a=”我爱” +“STATA” //要特别注意,引号必须是半角和英文模式. scalar list a //scalar命令将两个字符运算后的结果赋于a,然后显示a. scalar a=2 +“3” //注意到:字符与数值不能直接相加,显示类型不匹配type mismatchr(109);5.1.3关系运算关系运算包括大于、小于、等于;不等于、不小于、不大于等多种比较关系。

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

. di 3<5 //输出结果为1,意味着3小于5为真. di 3>5 //输出的结果为0,意味着3大于5为假。

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

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

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

. gen agegrp1=(age>=65)生成的数据中,将缺失值视为65岁以上分在了高龄组,这是错误的. gen agegrp2=(age>=65) if age<.生成的数据中,将缺失值排除在外,正确!这一命令常被用于生成虚拟变量。

. gen agegrp3=(age==65) if age<. //仅判断是否恰好为65岁. list //比较agegrp1、 agegrp2和agegrp3的差异,体会if age<.的作用。

5.1.4逻辑运算逻辑运算包括非(!),和(&)、或(|)三种,主要用于条件语句中。

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

. sysuse auto, clear. list price foreign if price>10000 | price<4000 & forei==0在STATA中,和(&)优先于或(|),因此上述命令与下面的命令等价:. list price foreign if price>10000 | (price<4000 & forei==0)试一试下面的命令,这里列示的是国产车中价格高于10000元或者低于4000元的车。

. list price foreign if (price>10000 | price<4000) & forei==05.2函数概览function函数只不过是一些编号的小程序,它会按一定的规则进行处理,之后报告结果。

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

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

. help functionType of function See help --------------------------------------+------------------------- Mathematical functions math functions Probability distributions and density functions density functionsRandom-number functions random-number functions String functions string functions Programming functions programming functions Date functions date functions Time-series functions time-series functions Matrix functions matrix functions弹出来的对话框告诉我们,STATA包括八类函数,分别是数学函数,分布函数,随机数函数,字符函数,程序函数,日期函数,时间序列函数和矩阵函数。

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

5.3数学函数math functions5.3.1三角函数,指数和对数函数数学函数可以直接对数据进行运算,也可以对变量进行运算。

. di sqrt(4) //开方,输出2. di sqrt(6+3)//先相加,再开方,输出3. di abs(-100) //求绝对值,输出100. di exp(1) //表示e1,输出2.7182818. di ln(exp(2)) //先求e2,再取对数,得到2. di _pi //_pi为圆周率,得到3.1415927. di cos(_pi) //_pi的余弦值,得到-1数学函数可以直接对数据进行运算,也可以对变量进行运算。

对变量的操作:clearset obs 5gen x=_n//生成新变量 x,取值为1,2,3,4,5gen y1=exp(x)//取指数gen y2=ln(x)//取对数gen y3=sin(exp(x) ) +cos(ln(x)) //取对数l5.3.2取整和四舍五入取整. di int(3.49) //int()取整,不论后面的小数是什么,只取小数点前的数值. di int(3.51) //输出3. di int(-3.49) //输出-3. di int(-3.51) //输出-3四舍五入. di round(3.49) //round()取整,四舍五入,结果为3. di round(3.51) //四舍五入,结果为4. di round(-3.49) //四舍五入,结果为-3. di round(-3.51) //四舍五入到个位数,结果为-4. di round(3.345,.1) //四舍五入到十分位,结果为3.3. di round(3.351,.1) //四舍五入到十分位,结果为3.4. di round(3.345,.01) //四舍五入到百分位,结果为3.35. di round(3.351,.01) //四舍五入到百分位,结果为3.35. di round(335.1,10) //四舍五入到十位,结果为330对变量的操作. sysuse auto, clear. gen nprice=price/10000 //将价格变到以万为单位. gen nprice2=round(nprice,0.01) //四舍五入到百分位. list nprice* //比较结果5.3.3求和及求均值gen和egenclearset obs 5gen x=_n //生成新变量x, x的取值从1到5gen y=sum(x) //求列累积和egen z=sum(x) //求列总和egen r=rsum(x y z) //求x+y+z总和egen hsum = rowtotal(x y z) //求hsum=a+b+cegen havg = rowmean(x y z) //求havg=(a+b+c)/3egen hsd = rowsd(x y z) //求a、b和c的方差egen rmin = rowmin(x y z) //求x y z)三个变量的最小值egen rmax = rowmax(x y z) //求x y z)三个变量的最大值list //注意比较y和z的不同。

egen avgx=mean(x) //求列均值egen medx=median(x) //求列中值egen stdx = std(x) //求列标准差replace y=3 in 3egen byte dxy = diff(x y) //当x与y相等时,differ取0,若不相等为1更多关于egen命令的用法将参考帮助:help egen5.3.4其他sysuse auto, clearegen rmpg = rank(mpg) //求mpg的次序sort rmpglist mpg rank //列示结果egen highrep78 = anyvalue(rep78), v(3/5) /*若rep78不为3、4或5,则为缺失值*/list rep78 highrep78clearinput a b1 00 01 10 10 01 .. 0endegen ab=group(a b)egen ab2=group(a b),missingla b ab ab2------------------1. 1 0 3 32. 0 0 1 13. 1 1 4 44. 0 1 2 25. 0 0 1 1------------------6. 1 . . 57. . 0 . 65.4字符函数string functions任务:将美国汽车数据中汽车商标变量值简化为取前三个字母,得到一个新的变量make3sysuse auto, cleargen str3 make3=substr(make,1,3)list make*a, "1")!=0 //strops(s1,s2)返回字符s2在s1中的位置gen na2=strpos(a, "2")!=0gen na3=strpos(a, "3")!=0gen na4=strpos(a, "4")!=0lista na1 na2 na3 na41. 2 0 1 0 02. 2 0 1 0 03. 1、2、3 1 1 1 04. 1、2、4 1 1 0 15. 1、2、4 1 1 0 16. 1、2 1 1 0 07. 2 0 1 0 08. 1、2 1 1 0 0webuse genxmpl2, cleargen name2 = word(name,2) //新变量name2,取值为name的第二个字母 list n*5.5 分类操作bycleareditgen n=_n //生成一个新变量n=1,2,3,4,5gen N=_N //生成一个新变量N=5,5,5,5,5gen z=y[1] //生成一个新变量z=y的第一个观察值lx y n N z-----------------------1. 1 1.1 1 5 1.12. 1 1.2 2 5 1.13. 1 1.3 3 5 1.14. 2 2.1 4 5 1.15. 2 2.2 5 5 1.1by x, sort: gen n1=_n //注意到n1与n的不同,n1按x分类进行操作by x, sort: gen N1=_Nby x, sort: gen z1=y[1]listx y n N z n1 N1 z11. 1 1.1 1 5 1.1 1 3 1.12. 1 1.2 2 5 1.1 2 3 1.13. 1 1.3 3 5 1.1 3 3 1.14. 2 2.1 4 5 1.1 1 2 2.15. 2 2.2 5 5 1.1 2 2 2.1任务:下列数据为家庭成员数据family.dta,其中hhid为家庭编码,age为家庭成员的年龄。

相关主题