
(3)生成AgeRank变量:以家庭为单位,对家庭成员按年龄升序排序;生成hsize变量:计算每个家庭的人口数 。
*使用gen生成:
bysort hid (age): gen AgeRankg = _n //使用bysort对hid分组并排序,(age)表示age不参与分组,仅参与家庭内部的排序 。bysort hid: gen hsizeg = _N
运行结果如下图所示,第一个家庭为3人,第二个家庭为6人 。

*使用egen生成:
bysort hid (age): egen AgeRanke = _nbysort hid :egen hsizee = _N
运行出错,表明egen无法使用_n和_N 。

(4)生成mean变量:计算每个家庭的平均年龄 。
*使用gen创建新变量:
bysort hid: gen meang = mean(age)
运行出错,表示gen无法使用egen专属函数 。

*使用egen创建新变量:
bysort hid: egen meane = mean(age)
运行结果如图所示,这表明egen的一些函数可以搭配by前缀使用 。

(5)生成IncomeSum变量:计算两个家庭的总收入 。
gen IncomeSumg = sum(income)egen IncomeSume = sum(income)
运行结果如下图所示 。

特别地,目前仅发现sum()函数能够同时被gen和egen使用 。利用gen命令,使用sum()函数生成的IncomeSumg是列累积和,比如IncomeSumg[2]=income[1]+ income[2],是一个变动值(running value),而在egen命令下sum()返回的则是列总和,IncomeSume的每一个变量值都等于income变量值的总和(即44000=5000+8000+9000+0+4000+8000+6000+2000+2000),是一个常数(constant) 。
实际上,sum()作为一个常规数学函数,并不属于egen专属函数,并且egen专属函数中的total()函数功能与sum()完全一致——返回列总和 。这个矛盾我们目前尚无答案,读者朋友们如有合理的想法请在评论区告诉我们唷~4.结论
综合上述分析,我们能够得到启示:使用gen命令创建新变量是一种“相对”创建,比如,现要求生成一个新变量,个人年收入incomey:
gen incomey = income*1
这个命令的实质是,创建一个新变量incomey,使得:
incomey[1] = income[1]*12incomey[2] = imcome[2]*12…incomey[_N] = income[_N]*12
而egen的某些专属函数的参数往往是某一整行或某一整列,比如计算两个家庭的月收入均值,月收入的下四分位数:
egen meani = mean(income)egen pctile4 = pctile(income),p(25)
其中,income是作为收入总和(即44000)参与计算的,这与gen命令有显著的不同 。
当然,egen还有许多其他专属函数,比如anycount()、anymatch()等使用“相对”创建方法的专属函数,也有rowfirst()、rowmax()等对每行进行匹配和判断的函数……总之,当你想创建一个以整行或整列的特征为结果或判断、匹配条件时就可以考虑使用egen命令啦 。
猜你喜欢
- 小红书体验星级什么意思?与服务分有什么关系?
- 快手极速版有什么亮点?与快手有什么区别?
- 筒叶花月怎么养?筒叶花月的栽培技术与繁殖方式
- 多肉植物雪莲怎么养?雪莲的栽培技术与繁殖方式介绍
- 蟹爪兰的生长习性与寓意和价值介绍
- 落花之舞怎么养?落花之舞的栽培技术与繁育方式
- 关于神态和动作的句子 关于神态与动作的句子
- 红糖水的功效与作用 不同红糖水不同功效
- 星球怎么养?星球栽培技术与繁殖方式介绍
- 金手指怎么养?金手指的栽培技术与繁殖方法
