STATA 程序更健壮 适应多种调用写法 更灵活

发布时间 2023-04-24 16:46:54作者: myrj
capture program drop ginid
program ginid
syntax varlist [if] [in] [,title(string)] //设定我们自己的命令格式
tempvar tinc tp m gini //设定 tinc tp m gini 四个变量为临时变量
marksample touse //生成一个 0/1 暂元,暂元名为 touse 
preserve //将当前内存中数据暂封存,直到 restore 命令再复原
quietly { //大括号内的命令将在后台执行,前台无显示 
keep if `touse' //根据 if 后输入的条件得到一个子数据
egen `tinc'=sum(`1') //生成总收入,将总收入数据暂存在临时变量'tinc'中
if "`2'"=="" { 
 local 2=1 
 } //如果没有人口变量,则默认为该变量为 1 
egen `tp'=sum(`2') 
gen `m'=`1'/`2' 
sort `m' 
gen `gini'=1-sum(`2'/`tp'*(2*sum(`1'/`tinc')-`1'/`tinc')) 
}
display as result "`title'基尼系数为:" as error `gini'[_N] //显示基尼系数
restore
end 

sysuse auto,clear
ginid rep78 mpg
ginid rep78
ginid rep78 mpg if mpg>20
ginid rep78 mpg if mpg>20 in 1/50

sysuse auto,clear
(1978 automobile data)

. ginid rep78 mpg
基尼系数为:.17245194

. ginid rep78
基尼系数为:.155535

. ginid rep78 mpg if mpg>20
基尼系数为:.12831196

. ginid rep78 mpg if mpg>20 in 1/50
基尼系数为:.15851207