Stata数学函数总结(一)

2016-11-11 司海涛 爬虫俱乐部 爬虫俱乐部



诸君安。在我们用stata处理数值型数据时,经常会用到一些数学函数。stata也提供了非常丰富的数学函数,如果掌握了这些函数,就可以帮助我们快速准确地处理数值型数据。今天,小编就给大家分享一些常用的数学函数。




一、简单数学函数        

1.exp(x)--指数函数
2.ln(x)--自然对数函数
3.log10(x)--以10为底的对数函数
4.sqrt(x)--求x的平方根,x为非负数
例如:


二、Modulus & integer rounding

1.ceil、floor、int、round区别
(1)ceil(x)--返回大于或等于x的最小整数。
(2)floor(x)--返回小于或等于x的最大整数。
(3)int(x)--返回x的整数部分。[int(x)与trunc(x)用  法相同]
(4)round(x)--返回最接近x的整数。(把x四舍五入到个位)

另外,round(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--表示四舍五入到百分位。

y也有可能是大于1的数,这时round(x,y)代表最接近x的y的整数倍的数。
例如:round(28,2)=28--表示最接近28的2的整数倍;
            round(28,5)=30--表示最接近28的5的整数倍;
            round(28,8)=32--表示最接近28的8的整数倍;
当然,y也可以是小数,
            round(2.314,0.03)=2.31--表示最接近2.314的0.03的整数倍。
接下来,我们通过具体的例子来进一步区别这四个函数:
操作与结果如下图:

2.mod(x,y)--求x除以y的余数。
即mod(x,y)==x-y*floor(x/y)
mod(x,y)函数在stata中只能在除数y>0的条件下才能求余。当除数y为0或者为负数时,返回值为 “ . ”
例如: mod(0.3,0)=.     mod(3,-0.56)=.  
下表列出了 mod(x,y)函数,在除数y>0的情况下,不同的x,y所对应的结果。 
观察上表我们发现两个问题:
(1)mod(0.3,0.1) ,其结果为0.1而不是0。很明显得,0.3/0.1=3,其余数应该是0,那么为什么是0.1呢 ? 我们再看x-y*floor(x/y),这里floor(0.3/0.1)=2,而不是3。是不是觉得很奇怪呢?
这是因为像0.3和0.1这些数,并不是精确地等值的二进位制数值。为了说明了这一点,我们用%21.18f的显示格式来分别display 0.1和0.3。
. di %21.18f .3
 0.299999999999999990
. di %21.18f .1
 0.100000000000000010
那 么0.3/0.1=2.999999999999999600 ,所以floor(0.3/0.1)=2。mod(0.3,0.1)也就等于0.1。事实上,更精确 的,mod(0.3,0.1)=0.099999999999999978,只不过stata默认的是显示为0.1。

(2)mod(-0.3,0.1)=5.551e- 17,而用公式x-y*floor(x/y)=-0.3-0.1*(-3)=0得出来的结果为0。出现这种情况也是因为0.3,0.1不是精确地数值,所 以再用公式x-y*floor(x/y)计算时是不能直接代入0.3和0.1的。
· dis -0.299999999999999990- 0.100000000000000010*(-3)
5.551e-17
mod(x,y)函数在我们处理数据时,也可以得到巧妙的应用。
例如:首先,我们导入一个数据。
insheet using d:/mod_example.txt
这 个数据是一个期刊目录(包含533中期刊),一共有1列1599行,每三行是一个期刊,依次表示为期刊名称、主办(管)单位、期刊号。(这里只显示出前 21行)现在我们需要把这个数据变为3列533行,每一列分别对应期刊名称、主办(管)单位、期刊号。这时候我们就可以借助mod函数解决这个问题。命令 如下:
outsheet using d:/期刊名称.txt if mod(_n,3)==1,replace
outsheet using d:/主办单位.txt if mod(_n,3)==2,replace
outsheet using d:/CN号.txt if mod(_n,3)==0,replace

我 们利用mod(_n,3)==1,mod(_n,3)==2,mod(_n,3)==0,把数据分为3份,其中_n表示行数,每种期刊的第一行,除以3的 余数为1,第二行余数为2,第三行余数为0,这样就把所有的期刊名称、主办(管)单位、期刊号单独的列出来,用outsheet导出结果如下:


再通过merge命令进行横向合并就可以得到3列533行的数据。


三、sum(x)--求和函数数

注意:sum(x)在generate命令和egen命令中的效果是不一样的。
下边给一个例子,来说明它们之间的区别:
我们通过以上程序生成一组简单的数据:
接着我们分别利用generate和egen生成一个变量,这个变量等于x的和。
1. generate sum1=sum(x)
2.  egen sum2=sum(x)
结果如下:

我们发现sum(x)在generate中生成的是x依次累加的和(列累积和),而在egen中生成的是一组不变的所有x相加的和(列总和)。另外,如果有缺失值,则看做0。


四、max&min

1.max(x1,x2,x3......xn) -- 求x1x2......xn中最大值

xn中有缺失值时,忽略缺失值。
例如:max(2,15,26,9,.,8)=26

当所有xn都为缺失值,返回值为缺失值。

例如: max(.,.,.,.,.)=.

1.min(x1,x2,x3......xn) -- 求x1,x2......xn中最小值
xn中有缺失值时,忽略缺失值。
例如:min(2,15,26,9,.,8)=2

当所有xn都为缺失值,返回值为缺失值

例如: min(.,.,.,.,.)=.


以上就是今天小编与大家分享的全部内容了,如果各位看官喜欢今天分享的内容,不要吝啬你的打赏哦!想了解更多的数学函数,请继续关注我们的公众号,我们将在后期继续分享更多的数学函数!
编辑by司海涛 徐苾雯

往期推文推荐:

1.天路——chinafin与cntrade命令

2.分时数据,从此唾手可得

3.有了这个命令,以后还怕重复?

4.esttab功能挖掘:“Yes”or“No”

5.用“套路”处理数据

6.厉害了,我stata哥

7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

8.据说这样数据替换比较快,你试一下,然后……

9.众里寻她千百度,synth命令来帮助!

10.I have a Stata, I have a python

11.用subinfile修改文件,滚蛋吧,繁琐的命令君!

12.删繁就简三秋叶,subinfile似剪刀

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部~~

微信扫一扫
关注该公众号