拥有数据如下,变量分别代表证券代码、年份、人口数量、收入数量
* Example generated by -dataex-. To install: ssc install dataex
clear
input str12 Stkcd float year long S0101a double Numdiv
"000001" 2016 350142 2712924995.83
"000001" 2017 343994 2335175945.78
"000001" 2018 429409 2489709648.07
"000002" 2008 1056521 549760510.9
"000002" 2009 1446970 769664715.26
"000002" 2010 1117665 1099521021.8
"000002" 2011 925732 1429377328.34
"000002" 2012 748877 1979199561.24
"000002" 2013 723239 4516137256.79
"000002" 2014 496907 5524071900
"000002" 2015 272350 7948189440.72
"000002" 2016 336065 8720930080.79
"000002" 2018 243721 11811892254.63
"000002" 2019 245835 11810738747.83
"000002" 2020 385248 14522165251.25
"000006" 2007 33648 25359163.1
"000006" 2008 70323 40574660.96
"000006" 2009 65182 60861991.44
"000006" 2010 72966 45646493.58
"000006" 2011 62505 39560294.4
end
[/CODE]
想要参考陈传波老师的stata十八讲,计算企业层面这个收入变量的基尼系数。不过我想实现面板数据的计算,想要编写“gini2”命令,输出每一个年份的基尼系数。
我编写的命令如下
capture program drop gini2
program gini2
syntax varlist [if] [in] [,title(string)] //设置我们自己的命令格式
tempvar tinc tp p w pregini2 gini2 //设定tinc tp p w pregini2 gini2 七个变量为临时变量
marksample touse //生成一个0/1暂元,暂元名为touse
preserve //将内存中的数据暂封存,直到restore命令再复原
quietly{ //大括号后的命令将在后台执行,前台无显示
keep if `touse' //根据if后输入的条件得到一个子数据
sort `3' `4'
by `3' : egen `tinc'=sum(`1') //生成总收入,将总收入数据暂存在临时变量`tinc'中
if "`2'"==""{
local 2=1
} //如果没有人口变量,则默认为该变量为1
by `3' :egen `tp'=sum(`2')
gen `m'=`1'/`2'
sort `3' `m'
bysort `3': gen `p'= `2'/ `tinc'
bysort `3': gen `w'= `1'/ `tinc'
bysort `3'(`m'): gen `q'=sum(`1'/ `tinc')
by `3': egen `pregini2'= sum(`p' *(2*`p'-`w'))
gen `gini2'=1-`pregini2'
}
tabstat `gini2',stat(mean) by(`3')
restore
end
执行“gini2”命令后,总是报错
. gini2 Numdiv S0101a year
too few variables specified
r(102);
想请教大家,知道这是怎么回事吗?