1、第六章 stata 语言中的常用函数本章重点:Stata 系统是一个统计分析系统,stata 语言是实现 stata 系统功能的基础,因此它其中包括了各种各样的函数。在 stata 系统中,函数的自变量可以是一个常数,可以是一个变量,或者是一连串的变量。在调用这些函数的时候,只要将函数中定义中的这些变量替换为相应值即可。这一章,介绍一下这些函数的定义以及使用方法。6.1 函数概览函数只不过是一些编号的小程序,它会按一定的规则进行处理,之后报告结果。实际上,谁也记不住这么多函数,因此,首先要学会查找函数的帮助,当记不住的时候,随时去查寻帮助。记住下面的命令才是最关键的。. help functi
2、on弹出来的对话框告诉我们,STATA 包括八类函数,分别是数学函数,分布函数,随机数函数,字符函数,程序函数,日期函数,时间序列函数和矩阵函数。本章主要介绍数学函数和字符函数,日期函数,随机函数等常用函数,其他函数可以参考 stata 帮助功能。6.2 数学函数 Abs(x) x 的绝对值 Acos(x) 反余弦函数例如:arcos (0.5)=1.57 arcos(1)=0 Asin(x) 反正弦函数 Atan(x) 反正切函数 atanh(x) 反双曲正切函数 ceil(x) 返回大于或等于自变量的最小的整数。例如:ceil(0.7)=1 ceil(3)=3 ceil(-0.7)=0 F
3、loor(x) 返回小于或等于自变量的最大的整数例如:floor(0.7)=0 floor(3)=3 floor(-0.7)=-1 Int(x) 返回自变量的整数部分例如:int(0.7)=0 int(2.9)=2 int(-2.55)=-2 Round(x,y) 返回与 y 的单位最接近的数 x,x 为真数,y 为近似单位例如:round(5.2,1)= round(4.8,1)=5 round(2.234,0.1)=2.2 round(2.234,0.01)=2.23 round(2.234,0.001)=2.234 round(28,5)=30 cloglog(x) 返回 ln-ln(1
4、-x)的值 comb(n,k) 从 n 中取 k 个的组合,即 comb(n,k)=n!/k!(n - k)!例如:comb(10,5)=252 comb(6,2)=15 cos(x) 余弦函数 digamma(x) 返回 digamma 函数值,这是 lngamma(x)的一阶导数 exp(x) 指数函数 例如:exp(0)=1 exp(3)= 20.085537 invcloglog(x) 返回 invcloglog(x) = 1 - exp-exp(x)的值 ln(x) 自然对数函数 lnfactorial(n) 返回 N 阶乘的自然对数,即 lnfactorial(n)= ln(n!)
5、 ,计算 n!时用 round(exp(lnfactorial(n),1)函数保证得出的结果是一个整数。求 n 的阶乘的对数比单纯求阶乘更有用,因为存在溢出值问题。 lngamma(x) 返回.gamma 函数的自然对数 log10(x) 以 10 为底对数函数 logit(x) 返回 logit 函数值 logit(x)= lnx/(1-x) max(x1,x2,.,xn) 求 x1, x2, ., xn 中的最大值例如:max(1,2,3)=3 min(x1,x2,.,xn) 求 x1, x2, ., xn 中的最小值例如:min(1,2,3)=3 mod(x,y) 求 x 除以 y 的余
6、数, 即 mod(x,y) = x - y*int(x/y)例如:mod(7,4)=3 reldif(x,y) 返回 x,y 的相对差异值,reldif(x,y)= |x-y|/(|y|+1).如果 x 和 y 都是相同类型的缺失值,则返回 0;如果只有一个为缺失值或 x、y 为不同类型的缺失值,则返回缺失值。 sign(x) 求 x 的符号,如果为负数,则返回-1;如果为 0,则返回 0;如果为正数,则返回 1;如果是缺失值,则返回缺失值 sin(x) 正弦函数 sqrt(x) 求 x 的平方根,x 只能为非负数例如:sqrt(100)=10 sum(x) 返回 x 的和,将缺失值看成是 0
7、 tan(x) 正切函数 tanh(x) 双曲正切函数 trigamma(x) 返回 lngamma(x)的二阶导数 trunc(x) 将数据截为特定的长度6.3 概率分布和密度函数 betaden(a,b,x) 返回 分布的概率密度,a,b 为参数,如果 x 1,返回 0 binomial(n,k,p) n 次 贝 努 里 试 验 , 取 得 成 功 次 数 小 于 或 等 于 k次 的 概 率 , 其 中 一 次 p 为 事 件 成 功 的 概 率 若 kn 返 回 0 binomialtail(n,k,p) n 次 贝 努 里 试 验 , 取 得 成 功 次 数 大 于 或 等 于k 次
8、 的 概 率 , 其 中 一 次 p 为 事 件 成 功 的 概 率 若 kn 返 回 0 binormal(h,k,r) 返回自由度为 n 的卡方的分布,chi2(n,x) = gammap(n/2,x/2)。若 x0. 若 x0. 若 x0. 若 x0. 若 x0. 若 x0 ,则返回 0 F(n1,n2,f) 返回分子自由度为 n1,分母自由度为 n2 的 F 分布函数。若 f0 ,则返回 0 Fden(n1,n2,f) 分子自由度为 n1,分母自由度为 n2 的 F 分布函数的概率密度函数。若 f0 ,则返回 0 gammap(a,x) gamma 分布 ibeta(a,b,x) 分布
9、 normal(z) 正态分布函数 normalden(z) 标准正态分布密度函数 tden(n,t) t 分布的概率密度函数6.4 随机数函数 uniform() 产生服从均匀分布的随机数 invnormal(uniform() 标准正态分布的随机数6.5 字符函数 char(n) 返回字符的 ASCII 码 indexnot(s1,s2) 返回 s1 中第一个在 s2 中找不到的字母的位置,若 s1 所有的字母在 s2 中均可以找到,则返回 0例如:indexnot(“12disxl“,“2fsd1“)=4 indexnot(“12disxl“,“2fsd1ixs“)=7indexnot(
10、“12disxl“,“2fsd1lixs“)=0 itrim(s) 将字符间多于一个空格缩减为一个空格例如:itrim(“hello there“) = “hello there“ length(s) 返回字符串 s 的长度例如:length(“ab“) = 2 lower(s) 将 s 中的字母变为 xiaoxie例如:lower(“THIS“) = “this“ ltrim(s) 将字符串 s 中首字母之前的空格去掉例如:ltrim(“ this“) = “this“ plural(n,s) or plural(n,s1,s2)如果 n!=+/-1, plural(n,s)就是将“s“加到
11、s 后。如果 s2 前有“+“,表示将 s2 加到 s1 后,如果 s2 前为“-“,则返回 s1 中去掉 s2 字符串后剩下的字符串。如果 s2 前既没有“+“也没有“-“, 则 plural(n,s1,s2)=s2.例如:plural(1, “horse“) = “horse“plural(2, “horse“) = “horses“plural(2, “glass“, “+es“) = “glasses“plural(1, “mouse“, “mice“) = “mouse“plural(2, “mouse“, “mice“) = “mice“plural(2, “abcdefg“, “
12、-efg“) = “abcd“ proper(s) 将首字母大写,而且将紧接着非字母字符后的字母大写,其他的字母小写例如:proper(“mR. joHn a. sMitH“) = “Mr. John A. Smith“proper(“jack oreilly“) = “Jack OReilly“proper(“2-cents worth“) = “2-CentS Worth“ real(s) 将 s 字符串转化为数字后返回,或返回“.”例如:real(“5.2“)+1 = 6.2real(“hello“) = . reverse(s) 将字符串颠倒过来例如:reverse(“hello“)
13、= “olleh“ rtrim(s) 去掉字符串末尾的空格例如:rtrim(“this “) =“this“. string(n) 将数字 n 转化为字符串例如: string(4)+“F“ = “4F“string(1234567) = “1234567“string(12345678) = “1.23e+07“string(.) = “.“ string(n,s) 将数字 n 转化为字符串例如:string(4,“%9.2f“) = “4.00“string(123456789,“%11.0g“) = “123456789“string(123456789,“%13.0gc“ = “123
14、,456,789“string(0,“%td“) = “01jan1960“string(225,“%tq“) = “2016q2“string(225,“not a format“) = “ strmatch(s1,s2) s2 与 s1 的形式相同则返回 1,否则返回 0例如:strmatch(“17.4“,“1?4“)=1 在 s2 中?代表此处有一个字符,*表示 0 或更多的字符 strpos(s1,s2) s2 在 s1 中第一次找到的位置,否则为 0例如:strpos(“this“,“is“) = 3strpos(“this“,“it“) = 0 subinstr(s1,s2,s3
15、,n) 返回 s1,将 s1 中第 n 次出现 s2 时的 s2 替换成 s3 ,若 n 为”.”, 则将所有 s1 中的 s2 字符串替换成 s3例如:subinstr(“this is this“,“is“,“X“,1) = “thX is this“subinstr(“this is this“,“is“,“X“,2) = “thX X this“subinstr(“this is this“,“is“,“X“,.) = “thX X thX“ substr(s,n1,n2) 返回 s1 的子集,从 s1 中第 n1 个字符开始抽取,抽 n2 个字符例如: substr(“abcdef“
16、,2,3) = “bcd“substr(“abcdef“,-3,2) = “de“substr(“abcdef“,2,.) = “bcdef“substr(“abcdef“,-3,.) = “def“substr(“abcdef“,2,0) = “substr(“abcdef“,15,2) = “ trim(s) 将字符串 s 的首字母之前和末尾的空格去掉例如:trim(“ this “) =“this“ upper(s) 将字符串 s 中的字母变为大写例如:upper(“this“) =“THIS“ word(s,n) s 中第 n 个单词例如:word(“glass tass a td“,
17、2)=tassword(“glass tass a td“,.)=. wordcount(s) s 中单词数例如:wordcount(“glass tass a td“)=46.6 日期时间函数 date(date, mask) 返回 date 与 1960 年 1 月 1 日相距的天数,其中mask 的形式为“MDY”或“YMD”或“DMY”,表示 date 中年月日的顺序 weekly(date, mask) 返回 date 与 1960 年 1 月 1 日相距的星期数 monthly(date, mask) 返回 date 与 1960 年 1 月 1 日相距的月数 quarterly(
18、date, mask) 返回 date 与 1960 年 1 月 1 日相距的季度数 halfyearly(date, mask) 返回 date 与 1960 年 1 月 1 日相距的星期数 yearly(date, mask) 返回 date 与 1960 年 1 月 1 日相距有多少个半年 clock(date, mask) 返回 date 与 1960 年 1 月 1 日相距的秒数 mdyhms(M, D, Y, h, m, s) 从年月日,小时 ,分钟,秒得到 stata日期时间值 dhms(td, h, m, s) 从日期,小时,分钟,秒得到 stata 日期时间值 hms(h,
19、m, s) 从小时,分钟,秒返回一个 stata 日期时间值 mdy(M, D, Y) 从月,日,年中得到一个 stata 日期值 yw(Y, W) 从年,星期得到一个 stata 日期值,表示距 1960年 1 月 1 日有多少个星期 ym(Y, M) 从年,月得到一个 stata 日期值,表示距 1960 年 1月 1 日有多少个月 yq(Y, Q) 从年,季度得到一个 stata 日期值,表示距 1960年 1 月 1 日有多少个季度 yh(Y, H) 从年,半年得到一个 stata 日期值,表示距 1960 年 1月 1 日有多少个半年 year(d) 从 stata 日期中得到年份 month(d) 从 stata 日期中得到月份 day(d) 从 stata 日期中得到当前日期(一个月内的日期) doy(d) 从 stata 日期中得到当前日期(一年内的日期) quarter(d) 从 stata 日期中得到当前季度 week(d) 从 stata 日期中得到当前星期 dow(d) 从 stata 日期中得到当前星期几,其中 0 为星期天,3 为星期三例:请算算你活了多少天?示例:一个生于 1975 年 12 月 27 日的家伙,他活了?.di date(“1975/12/27”,”YMD”)