精华内容
下载资源
问答
  • stata命令:国际贸易引力模型Stata代码
  • 连玉君Stata高级研讨班讲义学习教程(附代码
  • 数据处理stata代码.do

    2021-06-30 18:38:38
    数据处理stata代码.do
  • 此压缩文件里面包含面板数据熵值法的stata代码,每一步都有详细的解释,并且附有样本和数据,方便学者理解和掌握。
  • DEA各种模型原理及stata代码实现DEA各种模型原理及stata代码实现一、CCR和BCC1.原理2.效率测算stata代码3.Malmquist指数3.1M指数3.2Global-Malmquist指数4.指数计算代码与案例二、SBM模型1.原理2.stata代码实现三、...

    DEA各种模型原理及stata代码实现

    一、CCR和BCC

    1.原理

    CCR模型产出导向下的效率通过求解以下规划得出:
    C C R _ T E = m a x θ CCR\_ TE = max \theta CCR_TE=maxθ

    s . t . ∑ k = 1 K z k y k m ≥ y k m θ m , m = 1 , . . . , M s.t. \sum_{k=1}^Kz_{k}y_{km}\geq y_{km}\theta_{m},m=1,...,M s.t.k=1Kzkykmykmθm,m=1,...,M

    ∑ k = 1 K z k x k n ≤ x k n , , n = 1 , . . . , N \kern2em\sum_{k=1}^Kz_{k}x_{kn}\leq x_{kn},,n=1,...,N k=1Kzkxknxkn,,n=1,...,N

    z k ≥ 0 \kern2emz_{k}\geq 0 zk0

    其中, ( ∑ k = 1 K z k y k m , ∑ k = 1 K z k x k n ) (\sum_{k=1}^Kz_{k}y_{km},\sum_{k=1}^Kz_{k}x_{kn}) (k=1Kzkykm,k=1Kzkxkn)可以理解为前沿面, ( x k m , y k m ) (x_{km},y_{km}) (xkm,ykm)为每个决策单元(dmu)的值。
    在这里插入图片描述

    BCC模型在上述规划的约束条件中加入 ∑ k = 1 K z k = 1 \sum_{k=1}^Kz_k=1 k=1Kzk=1.

    2.效率测算stata代码

    代码格式如下:

    CCR模型对应规模报酬不变crs

    dea inputvars = outputvars ,rts(crs) 
    

    BCC模型对应规模报酬可变vrs

    dea inputvars = outputvars ,rts(vrs) 
    

    3.Malmquist指数

    3.1M指数

    Malmquist指数是效率的变化率,简单地想,如果以t期为基期,那么公式为:
    M a l m q u i s t t = D t ( x t + 1 , y t + 1 ) D t ( x t , y t ) Malmquist_t=\dfrac{D^t (x^{t+1},y^{t+1})}{D^t(x^t,y^t)} Malmquistt=Dt(xt,yt)Dt(xt+1,yt+1)
    其中, D t ( x t + 1 , y t + 1 ) D^t(x^{t+1},y^{t+1}) Dt(xt+1,yt+1)某一个决策单元在t+1期的生产情况基于t期的前沿面计算的效率(决策单元在t+1期的生产情况可能超出t期的前沿面,因此可能无解);

    D t ( x t , y t ) D^{t}(x^{t},y^{t}) Dt(xt,yt)某一个决策单元在t期的生产情况基于t期的前沿面计算的效率,也就是正常来说的 T E t TE_t TEt

    同样的,如果以t+1期为基期,那么公式为:
    M a l m q u i s t t + 1 = D t + 1 ( x t + 1 , y t + 1 ) D t + 1 ( x t , y t ) Malmquist_{t+1} =\dfrac{D^{t+1}(x^{t+1},y^{t+1})}{D^{t+1}(x^t,y^t)} Malmquistt+1=Dt+1(xt,yt)Dt+1(xt+1,yt+1)
    基期不同值不同,为了解决这个问题,定义:

    M a l m q u i s t t + 1 , t = ( M a l m q u i s t t × M a l m q u i s t t + 1 ) 0.5 = M ( x t + 1 , y t + 1 , x t , y t ) Malmquist_{t+1,t} =(Malmquist_{t}\times Malmquist_{t+1})^{0.5} =M(x^{t+1},y^{t+1},x^t,y^t) Malmquistt+1,t=(Malmquistt×Malmquistt+1)0.5=M(xt+1,yt+1,xt,yt)

    = [ D t ( x t + 1 , y t + 1 ) D t ( x t , y t ) × D t + 1 ( x t + 1 , y t + 1 ) D t + 1 ( x t , y t ) ] 0.5 =[\dfrac{D^{t}(x^{t+1},y^{t+1})}{D^t(x^t,y^t)}\times \dfrac{D^{t+1}(x^{t+1},y^{t+1})}{D^{t+1}(x^t,y^t)}]^{0.5} =[Dt(xt,yt)Dt(xt+1,yt+1)×Dt+1(xt,yt)Dt+1(xt+1,yt+1)]0.5

    = D t + 1 ( x t + 1 , y t + 1 ) D t ( x t , y t ) × [ D t ( x t + 1 , y t + 1 ) D t + 1 ( x t + 1 , y t + 1 ) D t ( x t , y t ) D t + 1 ( x t , y t ) ] 0.5 =\dfrac{D^{t+1}(x^{t+1},y^{t+1})}{D^t(x^t,y^t)}\times [\dfrac{D^{t}(x^{t+1},y^{t+1})}{D^{t+1}(x^{t+1},y^{t+1})}\dfrac{D^{t}(x^{t},y^{t})}{D^{t+1}(x^t,y^t)}]^{0.5} =Dt(xt,yt)Dt+1(xt+1,yt+1)×[Dt+1(xt+1,yt+1)Dt(xt+1,yt+1)Dt+1(xt,yt)Dt(xt,yt)]0.5

    = T E C H × T E C C H =TECH \times TECCH =TECH×TECCH ------- Fare分解

    其中:TECH表示效率变化,TECCH表示技术进步.

    在规模报酬不变时,Fare分解完全正确,但是在规模报酬可变时,须考虑规模报酬的变化

    T F P C H = M ( x t + 1 , y t + 1 , x t , y t ) TFPCH= M(x^{t+1},y^{t+1},x^t,y^t) TFPCH=M(xt+1,yt+1,xt,yt)

    = D v t + 1 ( x t + 1 , y t + 1 ) D v t ( x t , y t ) × [ D c t ( x t + 1 , y t + 1 ) D t + 1 ( x t + 1 , y t + 1 ) D t ( x t , y t ) D t + 1 ( x t , y t ) ] 0.5 × D c t + 1 ( x t + 1 , y t + 1 ) / D v t + 1 ( x t + 1 , y t + 1 ) D c t ( x t , y t ) / D v t + 1 ( x t , y t ) =\dfrac{D^{t+1}_v(x^{t+1},y^{t+1})}{D^t_v(x^t,y^t)}\times [\dfrac{D^{t}_c(x^{t+1},y^{t+1})}{D^{t+1}(x^{t+1},y^{t+1})}\dfrac{D^{t}(x^{t},y^{t})}{D^{t+1}(x^t,y^t)}]^{0.5}\times \dfrac{D^{t+1}_c(x^{t+1},y^{t+1})/D^{t+1}_v(x^{t+1},y^{t+1})}{D^{t}_c(x^{t},y^{t})/D^{t+1}_v(x^{t},y^{t})} =Dvt(xt,yt)Dvt+1(xt+1,yt+1)×[Dt+1(xt+1,yt+1)Dct(xt+1,yt+1)Dt+1(xt,yt)Dt(xt,yt)]0.5×Dct(xt,yt)/Dvt+1(xt,yt)Dct+1(xt+1,yt+1)/Dvt+1(xt+1,yt+1)

    = T E C H × T E C C H × S E C H =TECH \times TECCH \times SECH =TECH×TECCH×SECH -----------RD分解

    其中, D c D_c Dc表示按规模报酬不变计算效率, D v D_v Dv表示按规模报酬可变计算效率,SECH表示规模变化。

    3.2Global-Malmquist指数

    Malmquist指数可能无解!

    因此有Global Malaquist指数,思想很简单,计算一个全局效率,以他为基准,公式为:

    G M = M c G ( x t , y t , x t + 1 , y t + 1 ) = D c G ( x t + 1 , y t + 1 ) D c G ( x t , y t ) GM = M^G_c(x^t,y^t,x^{t+1},y^{t+1})=\dfrac{D^G_c(x^{t+1},y^{t+1})}{D^G_c(x^t,y^t)} GM=McG(xt,yt,xt+1,yt+1)=DcG(xt,yt)DcG(xt+1,yt+1)

    其中, D G D^G DG表示基于全局前沿面的效率。 D t D^t Dt的计算方式是仅保留第t期的数据来计算效率,而 D G D^G DG是将所有数据都保留来计算效率(不会无解)。

    M c G ( x t , y t , x t + 1 , y t + 1 ) M^G_c(x^t,y^t,x^{t+1},y^{t+1}) McG(xt,yt,xt+1,yt+1)

    = D c t + 1 ( x t + 1 , y t + 1 ) D c t ( x t , y t ) × D c G ( x t + 1 , y t + 1 ) D t + 1 ( x t + 1 , y t + 1 ) D c t ( x t , y t ) D G ( x t , y t ) =\dfrac{D^{t+1}_c(x^{t+1},y^{t+1})}{D^t_c(x^t,y^t)}\times \dfrac{D^{G}_c(x^{t+1},y^{t+1})}{D^{t+1}(x^{t+1},y^{t+1})}\dfrac{D^{t}_c(x^{t},y^{t})}{D^{G}(x^t,y^t)} =Dct(xt,yt)Dct+1(xt+1,yt+1)×Dt+1(xt+1,yt+1)DcG(xt+1,yt+1)DG(xt,yt)Dct(xt,yt)

    = T E C H × B P C =TECH\times BPC =TECH×BPC

    其中,TECH 是通常的效率变化指标,BPG 是最佳实践差距,表明t+1期的基准技术相较于t期是接近还是远离了全局的基准⽣产技 术。当然也可以采用RD分解,分解规模变化。

    4.指数计算代码与案例

    malmq2 inputvars = outputvars  ,
    选项:global 计算Golbal-Malmquist指数 
    ​            saving()   保存
    

    案例数据展示,其中投入为l和k,期望产出为g,非期望产出为w,s,f

    yearcitywsflgk
    2018上海市291449100161631375.6631521.27.60E+07
    2018南京市155341237535914462.611752.87.00E+07
    2018无锡市206224024252929388.2118975.10E+07

    先设置面板xtset

    然后计算malmquist指数(l k为投入,g为产出),fare分解
    在这里插入图片描述

    RD分解:
    在这里插入图片描述

    GM指数计算
    在这里插入图片描述

    二、SBM模型

    1.原理

    带有非期望产出的SBM模型:
    p h i ∗ = m i n 1 − 1 m ∑ i = 1 m ( S i o − X i o ) 1 + 1 s 1 + s 2 ( ∑ r 1 = 1 s 1 S r 1 o g y r 1 o g + ∑ r 2 = 1 s 2 S r 2 o b y r 2 o b ) phi^*=min\dfrac{1 - \dfrac{1}{m} \sum_{i=1}^m(\dfrac{S_{io}^-}{X_{io}})}{1+\dfrac{1}{s_1+s_2}(\sum_{r_1=1}^{s_1}\dfrac{S_{r_{1o}}^g}{y_{r_{1o}}^g}+\sum_{r_2=1}^{s_2}\dfrac{S_{r_{2o}}^b}{y_{r_{2o}}^b})} phi=min1+s1+s21(r1=1s1yr1ogSr1og+r2=1s2yr2obSr2ob)1m1i=1m(XioSio)
    s . t X o = X λ + S o − ( 1 ) s.t\kern5em X_o=X\lambda +S_o^- \kern3em(1) s.tXo=Xλ+So(1)
    y o g = Y g λ − S o g ( 2 ) \kern6em y_o^g=Y^g\lambda -S_o^g \kern3em(2) yog=YgλSog(2)
    y o b = Y b λ + S o b ( 3 ) \kern6em y_o^b = Y^b\lambda + S_o^b \kern3em(3) yob=Ybλ+Sob(3)
    S o − , S o g , S o b , λ > 0 ( 4 ) \kern6em S_o^-,S_o^g,S_o^b, \lambda >0 \kern2em(4) So,Sog,Sob,λ>0(4)
    其中, ( X o , y o g , y o b ) (X_o,y^g_o,y^b_o) (Xo,yog,yob)分别表示每个决策单元的值, ( X λ , y g λ , y b λ ) (X\lambda,y^g\lambda,y^b\lambda) (Xλ,ygλ,ybλ)表示前沿面。
    S o − , S o g , S o b S_o^-,S_o^g,S_o^b So,Sog,Sob表示松弛值,即投入或产出与前沿面的距离,也即投入比理想投入多的部分、期望产出比理想期望产出少的部分、非期望产出比理想非期望产出多的部分。 ϕ ∗ \phi^* ϕ即得出的效率。

    2.stata代码实现

    无非期望产出

    sbmeff inputvars = desirable_outputvars , dmu(varname) 
    

    有非期望产出

    sbmeff inputvars = desirable_outputvars : undesirable_outputvars  , dmu(varname) 
    

    TE表示效率
    在这里插入图片描述

    指数计算

    ** sbm_t
    sbmeff l k = g:w s f,dmu(cit) time(year) sav(sbm_t,replace)
    ** sbm_g 全局前沿
    sbmeff l k = g:w s f,dmu(cit)  sav(sbm_g,replace)
    merge m:m cit  using sbm_g
    rename TE TE_G
    drop _merge
    merge 1:1 cit year using sbm_t
    drop _merge
    xtset dmu year
    tostring year, generate(time1)
    gen lyear = l.year
    tostring lyear, generate(time2)
    gen time = time1 + "~" +time2
    gen TFPCH = TE_G / l.TE_G
    gen TECH = TE/l.TE
    gen BPC = TFPCH / TECH
    keep if TFPCH != .
    list city time TFPCH TECH BPC
    

    在这里插入图片描述

    三、方向性距离函数(DDF)

    1.原理

    D → ( x , y , b ; g ) = m a x β \overrightarrow{D}(x,y,b;g)=max\beta D (x,y,b;g)=maxβ

    s . t . ∑ n = 1 N z n x m n ≤ x m − β g x m , m = 1 , 2... , M s.t. \sum_{n=1}^Nz_nx_{mn} \leq x_m-\beta g_{xm},m=1,2...,M s.t.n=1Nznxmnxmβgxm,m=1,2...,M

    ∑ n = 1 N z n y s n ≥ y s + β g y s , s = 1 , 2... , S \kern4ex\sum_{n=1}^Nz_ny_{sn} \geq y_s+\beta g_{ys},s=1,2...,S n=1Nznysnys+βgys,s=1,2...,S

    ∑ n = 1 N z n b j n = b j − β g b j , j = 1 , 2... , J \kern4ex\sum_{n=1}^Nz_nb_{jn} =b_j-\beta g_{bj},j=1,2...,J n=1Nznbjn=bjβgbj,j=1,2...,J

    z n ≥ 0 , β > 0 , n = 1 , 2... , N \kern4ex z_n\geq 0 ,\beta>0,n=1,2...,N zn0,β>0,n=1,2...,N

    其中, g g g为投⼊和产出的缩放的⽅向向量, β \beta β为无效率值。

    2.stata代码实现

    ddfeff l k = g:w s f,dmu(cit) time(year) sav(ddf,)
    merge 1:1 cit year using ddf
    gen TE = 1-Dval
    list year city  Dval TE
    

    在这里插入图片描述

    3.非径向DDF模型(NDDF)

    N D → ( x , y , b ; g ) = m a x ( w m x β s y + w s t β s y + w j b β j b ) \overrightarrow{ND}(x,y,b;g)=max( w^x_m \beta_s^y+w_s^t\beta^y_s+w_j^b\beta_j^b) ND (x,y,b;g)=max(wmxβsy+wstβsy+wjbβjb)

    s . t . ∑ n = 1 N z n x m n ≤ x m − β m s g x m , m = 1 , 2... , M s.t. \sum_{n=1}^Nz_nx_{mn} \leq x_m-\beta_m^s g_{xm},m=1,2...,M s.t.n=1Nznxmnxmβmsgxm,m=1,2...,M

    ∑ n = 1 N z n y s n ≥ y s + β s y g y s , s = 1 , 2... , S \kern4ex\sum_{n=1}^Nz_ny_{sn} \geq y_s+\beta_s^y g_{ys},s=1,2...,S n=1Nznysnys+βsygys,s=1,2...,S

    ∑ n = 1 N z n b j n = b j − β j b g b j , j = 1 , 2... , J \kern4ex\sum_{n=1}^Nz_nb_{jn} =b_j-\beta_j^b g_{bj},j=1,2...,J n=1Nznbjn=bjβjbgbj,j=1,2...,J

    z n ≥ 0 , β > 0 , n = 1 , 2... , N \kern4ex z_n\geq 0 ,\beta>0,n=1,2...,N zn0,β>0,n=1,2...,N

    NDDF模型对比DDF只是让投入产出的无效率系数变为不同。

    NDDF模型代码实现

    在这里插入图片描述

    由于结果给出了所有方向的 β \beta β,也可以按照自己的方法计算TE(自己定义的公式).比如:

    T E = 1 − 0.2 ( B _ l + B _ k + B _ w + B _ s + B _ f ) 1 + B g TE=\dfrac{1-0.2(B\_l +B\_k+B\_w+B\_s+B\_f)}{1+B_g} TE=1+Bg10.2(B_l+B_k+B_w+B_s+B_f)

    其内涵为每种因素的平均效率。

    3.GML指数

    计算完效率之后可以计算效率的变化率Global-Malmquist-Luenberger指数。

    由于已被证明:

    D → ( x , y , b ; g ) = 1 1 + D ( x , y , b ) \overrightarrow{D}(x,y,b;g)=\dfrac{1}{1+D(x,y,b)} D (x,y,b;g)=1+D(x,y,b)1

    因此有Malmquist-Luenberger指数:

    M L = D t ( x t + 1 , y t + 1 , b t + 1 ; g t + 1 ) × D t + 1 ( x t + 1 , y t + 1 , b t + 1 ; g t + 1 ) D t ( x t , y t , b t ; g t ) × D t + 1 ( x t , y t , b t ; g t ) ML=\dfrac{{D^t}(x^{t+1},y^{t+1},b^{t+1};g^{t+1})\times{D^{t+1}}(x^{t+1},y^{t+1},b^{t+1};g^{t+1})}{{D^t}(x^t,y^t,b^t;g^t)\times{D^{t+1}}(x^{t},y^t,b^t;g^t)} ML=Dt(xt,yt,bt;gt)×Dt+1(xt,yt,bt;gt)Dt(xt+1,yt+1,bt+1;gt+1)×Dt+1(xt+1,yt+1,bt+1;gt+1)

    = [ 1 + D t → ( x t , y t , b t ) 1 + D t → ( x t + 1 , y t + 1 , b t + 1 ) × 1 + D t + 1 → ( x t , y t , b t ) 1 + D t + 1 → ( x t + 1 , y t + 1 , b t + 1 ) ] 0.5 \kern4ex =[\dfrac{1 + \overrightarrow{D^t}(x^t,y^t,b^t)}{1+\overrightarrow{D^{t}}(x^{t+1},y^{t+1},b^{t+1})}\times \dfrac{1+ \overrightarrow{D^{t+1}}(x^t,y^t,b^t)}{1+\overrightarrow{D^{t+1}}(x^{t+1},y^{t+1},b^{t+1})}]^{0.5} =[1+Dt (xt+1,yt+1,bt+1)1+Dt (xt,yt,bt)×1+Dt+1 (xt+1,yt+1,bt+1)1+Dt+1 (xt,yt,bt)]0.5

    和GML指数

    G M L = D G ( x t + 1 , y t + 1 , b t + 1 ) D G ( x t , y t , b t ) = 1 + D G → ( x t , y t , b t ) 1 + D G → ( x t + 1 , y t + 1 , b t + 1 ) GML = \dfrac{D^G(x^{t+1},y^{t+1},b^{t+1})}{D^G(x^t,y^t,b^t)} = \dfrac{1+\overrightarrow{D^G}(x^{t},y^{t},b^{t})}{1+\overrightarrow{D^G}(x^{t+1},y^{t+1},b^{t+1})} GML=DG(xt,yt,bt)DG(xt+1,yt+1,bt+1)=1+DG (xt+1,yt+1,bt+1)1+DG (xt,yt,bt)

    = 1 + D t → ( x t , y t , b t ) 1 + D + 1 → ( x t + 1 , y t + 1 , b t + 1 ) × ( 1 + D G → ( x t , y t , b t ) ) / ( 1 + D t → ( x t , y t , b t ) ) ( 1 + D G → ( x t + 1 , y t + 1 , b t + 1 ) ) / ( 1 + D + 1 → ( x t + 1 , y t + 1 , b t + 1 ) ) \kern5ex = \dfrac{1+\overrightarrow{D^t}(x^{t},y^{t},b^{t})}{1+\overrightarrow{D^+1}(x^{t+1},y^{t+1},b^{t+1})} \times \dfrac{(1+\overrightarrow{D^G}(x^{t},y^{t},b^{t}) )/(1+\overrightarrow{D^t}(x^{t},y^{t},b^{t}))}{(1+\overrightarrow{D^G}(x^{t+1},y^{t+1},b^{t+1}))/ (1+\overrightarrow{D^+1}(x^{t+1},y^{t+1},b^{t+1}))} =1+D+1 (xt+1,yt+1,bt+1)1+Dt (xt,yt,bt)×(1+DG (xt+1,yt+1,bt+1))/(1+D+1 (xt+1,yt+1,bt+1))(1+DG (xt,yt,bt))/(1+Dt (xt,yt,bt))

    = T E C H × B P C \kern5ex = TECH \times BPC =TECH×BPC

    4.指数测算

    ML指数

    在这里插入图片描述
    存在大量缺失值,使用gml指数
    在这里插入图片描述

    四、总结

    上述包含了 dea、malmq2、ddfeff等命令,可能需要高版本stata,stata16最好。如果缺少了命令,可通过 ssc install XX (XX为命令名称)下载,网络不好可能下载失败。也可使用其他人下载好的命令,推荐 连玉君老师的plus文件。
    文中相关数据和资源:
    链接:https://pan.baidu.com/s/15wMpDovYiqG-LI74Z_NhPQ
    提取码:em4g
    最后,在肝论文的小伙伴,都帮你们到这了,不点个大大的赞吗!!

    展开全文
  • stata:Stata代码-源码

    2021-02-17 03:38:18
    斯塔达仓库
  • stata面板数据处理全过程代码 完全版 从检验到回归
  • Atom-stata-exec.zip,在windows、mac或linux上从atom文本编辑器运行stata代码StATA Excel,atom是一个用web技术构建的开源文本编辑器。
  • 整理了一下几个空间权重矩阵生成的Stata代码,小伙伴们仅供参考哈。 //权重矩阵生成 //安装命令spwmatrix ssc install spwmatrix //安装命令spatwmat //1.输入命令 findit spatwmat //2.点击界面链接 "sg162 from ...

    整理了一下几个空间权重矩阵生成的Stata代码,小伙伴们仅供参考哈。

    //权重矩阵生成
    
    //安装命令spwmatrix
    ssc install spwmatrix
    
    //安装命令spatwmat
    //1.输入命令 findit spatwmat
    //2.点击界面链接 "sg162 from http://www.stata.com/stb/stb60"
    //3.找到INSTALLATION FILES,点击 "click here to install"
    
    //导入经纬度坐标,lat纬度,lng经度,并重命名
    rename lat x     //纬度赋值x
    rename lng y     //经度赋值y
    
    //1.1 基于距离的邻接权重矩阵wbin_1、wbin
    
    *spatwmat
    //band()为邻接参数,可手动调整,band(0 10)即距离band在0~10之间的单位视为邻接,赋权重1,否则赋权重0,下述db(0 10)同理
    spatwmat, name(wbin_1) xcoord(x) ycoord(y) band(0 10) binary
    matrix list wbin_1            //查看权重矩阵wbin_1
    putexcel set wbin_1, replace  //将权重矩阵wbin_1导入excel文件中
    putexcel A1 = matrix(wbin_1)  //从A1单元格导入
    
    *spwmatrix
    spwmatrix gecon x y, wn(wbin) wtype(bin) db(0 10) cart   //wtype()为权重矩阵类型,wtype(bin)为邻接权重矩阵,其他参数可参考 help spwmatrix
    matrix list wbin
    putexcel set wbin, replace
    putexcel A1 = matrix(wbin)
    
    *1.2 基于近邻数量的邻接权重矩阵wnear
    
    *spmatrix_knn
    //knn(10)即距离最近的10个单位赋权重1,其他赋权重0
    spwmatrix gecon x y, wname(wnear) cart knn(10)
    matrix list wnear
    putexcel set wnear, replace
    putexcel A1 = matrix(wnear)
    
    *1.3 计算一阶反距离权重矩阵winv
    spwmatrix gecon x y, wn(winv) wtype(inv) cart alpha(1)
    matrix list winv
    putexcel set winv, replace
    putexcel A1 = matrix(winv)
    
    *1.4 计算二阶反距离权重矩阵winv2
    spwmatrix gecon x y, wn(winv2) wtype(inv) cart alpha(2)
    matrix list winv2
    putexcel set winv2, replace
    putexcel A1 = matrix(winv2)
    
    *1.5 计算经济地理权重矩阵wecon
    //econvar(var)为所设定的经济变量,测量经济距离,此处设定的经济变量var为peo,即各地人口数量
    spwmatrix gecon x y, wn(wecon) wtype(econ) econvar(peo)
    matrix list wecon
    putexcel set wecon, replace
    putexcel A1 = matrix(wecon)
    
    *1.6 计算反经济地理权重矩阵winvecon
    //测量反经济距离
    spwmatrix gecon x y, wn(winvecon) wtype(invecon) econvar(edu)
    matrix list winvecon
    putexcel set winvecon, replace
    putexcel A1 = matrix(winvecon)
    
    //之后打开当前目录下各自的.xls文件,将生成的权重矩阵导入.dta文件中即可
    
    展开全文
  • stata中运用熵值法求权重,可以运用于面板数据,非常方便。
  • 请按照代码中“步骤1预备知识”部分中的说明设置全局变量。 子文件夹ado/auxiliary包含程序中使用的必要的停用词和子词文件。 还包括用于扫描过程中所有必需软件包的ado文件。 包含文件的文件夹R_scan_code: ...
  • 用Python写Stata代码(os模块的应用)问题和基本思路问题基本思路代码和结果 Stata是计量经济学的最有名的软件,但是其自身存在一些缺陷,特别是,在清洗数据的时候,会显得比较笨重。此时,通过Python的os模块,...

    Python与Stata交互——用Python写Stata代码(os模块的应用):以清洗NCDC气象数据为例


    Stata是计量经济学的最有名的软件,但是其自身存在一些缺陷,特别是,在清洗数据的时候,会显得比较笨重。此时,通过Python的os模块,可以自动生成Stata代码,从而提高效率。此文通过一个亲身经历的案例来对此进行说明。

    问题和基本思路

    问题

    在用Stata清洗数据的时候,往往会碰到如下问题:

    1. 原始数据文件不一定是Stata所能识别的文件类型
      这需要利用Python将Stata不可识别的文件类型转成其可识别的文件类型。我遇到的情况是,原始数据文件没有后缀,这使得该文件类型显示为“文件”。这种没有后缀名的文件,可以用记事本打开,但是无法用Stata进行读取。这时候需要给各个文件加上后缀。加后缀的工作可以手动,但是往往会因为问题2而望而却步。
    2. 原始数据分散在不同的文件夹、一个文件夹里有多个原始数据文件
      我清洗的数据,原始数据散落在47个文件夹,而且每个文件夹里面有几百个原始数据文件。虽然Stata有强大的循环语句,但是需要提前定义循环所用的“域”(比如,从1到10循环)。如果散落在各个文件夹中的数据文件的名称统一的或存在一定规律,那么可以直接手动把这个“域”用global定义出来。然而,散落在每文件夹中的数据文件名称并不统一。因此,这个时候并不适合手动,而需要求助其他工具。Python的os模块可以找出目录下的文件夹的名称以及文件的名称,并可以对其进行重命名等操作,因此,我们可以借助它来自动生成Stata代码(关键是生成“域”)。

    基本思路

    对于每一个文件夹里的数据集,需要先给它们加上后缀,然后进行如下的Stata里的循环代码:

    cd "文件夹的路径"
    global sites a b c ... [循环域里面所有元素]
    foreach i of global sites {
        import delimited `i'.csv, encoding(Big5) clear
        gen site=`i'
        save `i'.dta, replace
    }
    foreach i of global sites {
        append using `i'.dta
    }
    duplicates drop site v1, force
    save "保存目录\保存文件名", replace
    
    

    这里的关键是找到[循环域里面所有元素],即每个文件夹里面的所有数据文件的名称。

    代码和结果

    给文件加上后缀(这里加的是.csv)和生成Stata代码的Python代码如下:

    import os
    
    path = "路径"
    
    f = open("clean.txt", "w")  # 打开txt,开始在里面写Stata代码
    
    dict_year = os.listdir(path)  # 路径下的所有文件夹及文件名(我清洗数据的时候,目录下只有文件夹)
    print(dict_year)
    # 下面的代码对路径下每个文件中的数据文件进行操作
    for item in dict_year:
        f.write('\n\ncd "路径\%s"' % item)
        f.write("\nglobal sites ")
        files = os.listdir("路径\\" + item)
        print(files)
        # 无后缀文件转为csv
        for i in files:
            f.write(i[0:6] + " ")
            if i[-3:] != "csv":
                os.rename(path + "\\" + item + "\\" + i, path + "\\" + item + "\\" + i + ".csv")
        f.write("\n")
        f.write(
            "foreach i of global sites {\n    import delimited `i'-99999-%s.csv, encoding(Big5) clear\n"
            "    gen site=`i'\n    save `i'-99999-%s.dta, replace\n}\n" % (item[-4:],item[-4:])
        )
        f.write(
            "foreach i of global sites {\n    append using `i'-99999-%s.dta\n}\n" % item[-4:]
        )
        f.write('duplicates drop site v1, force\nsave "保存路径\china_isd_lite_%s.dta", replace' % item[-4:])
    f.close()

    最终得到了一个写好了Stata代码的txt文件,将txt内容复制到do文档就可以用Stata运行了。最终得到的Stata代码有600+行。下图是生成的Stata代码的一小部分:
    在这里插入图片描述

    如果手动敲,需要敲到猴年马月,而且还不一定能敲对这个巨大的循环“域”。用Python写Stata代码又快又准确,为繁琐的数据清理工作带来了一丝曙光~~

    展开全文
  • stata代码笔记,随时更新

    千次阅读 2020-05-03 10:57:07
    stata 1.stata计数函数 ***产生新变量var1,其值为ID的重复次数 bysort ID: egen var1=count(ID) 2.stata去重 ***删除ID重复的观测值,只保留不重复的观测值 duplicates drop ID ,force 3.stata结果导出为doc **...

    stata代码笔记

    名言

    All knowledge is, in final analysis, history;
    All sciences are, in the abstact, mathematics;
    All judgements are, in their rationale, statistics.
    
    在终极的分析中,一切知识都是历史;
    在抽象的意义下,一切科学都是数学;
    在理性的世界里,所有的判断都是统计学。
    ——C.R.Rao《统计与真理》
    

    1.stata计数函数

    ***产生新变量var1,其值为ID的重复次数
     bysort ID: egen var1=count(ID)
    

    2.stata去重

    * 单一条件去重
    * 方法1
    ***删除ID重复的观测值,只保留不重复的观测值
     duplicates drop ID ,force
     *方法2
    sort  id
    by id: gen filter=_n  //对相同id的数据从1到最后一条编号
    keep if filter == 1   //保留id为1的,即为id不重复的
    
    ** 多条件去重
    * 只能用方法2
    *sort 列A 列B 列C 
    by 列A 列B 列C : gen set = _n
    keep if set== 1   //保留set为1的,即为多个条件均不重复的
    

    3.stata结果导出为doc

    ***安装asdoc
    ssc install asdoc, replace
    
    ***例1,把tab结果输出为doc表格
    asdoc tab var1
    
    ***例2 把reg结果输出为doc
    asdoc reg var1 var2 var3
    
    例3 sum结果输出为doc
    asdoc sum,  stat(N mean sd tstat p1 p99) fs(7) dec(2)  title(XXX)
    

    以上输出结果会存储在你当前工作簿

    解释:

    1. sum 结果输出为doc;
    2. stat(# # #) 表示需要输出的描述性统计变量,具体而言,stat(N mean sd tstat p1 p99) 表示输出的统计变量为样本数、算术平均数、标准差、t 值、1% 分位数、99% 分位数,
    3. fs(#) 为 Font size 的缩写,表示字号大小为 # 英镑,
    4. dec(#) 为 Decimal points 的缩写,表示输出结果保留到小数点后 # 位
    5. title 自己取

    缺点,不能自己选择文件位置
    参考链接 https://zhuanlan.zhihu.com/p/47910987

    4.结果(回归结果)的输出

    *** 安装outreg2
    ssc install outreg2,replace
    
    *** 默认输出结果为txt,可以更改为doc。
    *** 输出结果会用*表示p值
    ***例1
    reg var1 var2
    outreg2 using D:/111.doc
    ***例2,多个结果的导出,outreg2结合eststo使用,先储存结果,再导出
    reg Y1 var2 var3
    est store M1 /*储存结果在M1中*/
    reg Y2 var2 var3
    est store M1 /*储存结果在M2中*/
    outreg2 [ M1 M2] using D:/111.doc
    

    outreg2命令详解,见下链接https://zhuanlan.zhihu.com/p/98393452?from_voters_page=true

    结果输出详解,见下链接

    1. https://zhuanlan.zhihu.com/p/93793601
    2. https://blog.csdn.net/arlionn/article/details/101321523
    3. https://zhuanlan.zhihu.com/p/101239205
    4. https://blog.csdn.net/arlionn/article/details/103855343

    5. 结果输出(esttab 结合eststo使用)

    命令(以回归为例)

    ***安装esttab
    ssc install esttab, replace
    ***例子
    ***做三个回归,eststo表示把你的结果存起来下面esttab用
    eststo: reg varY1 var1 var2 var3
    eststo: reg varY2 var1 var2 var3
    eststo: reg varY3 var1 var2 var3
    *** 三个回归的结果输出为一个表,文件名称为myfile, 并输出SE和Adjust R方
    esttab using myfile, se ar2
    

    表如下

    Y1Y2Y3
    coe1 * (SE1)coe4 * (SE4)coe7 * (SE7)
    coe2 * (SE2)coe5 * (SE5)coe8 * (SE8)
    coe3 * (SE3)coe6 * (SE6)coe9 * (SE9)
    R1R2R3

    详细代码及解释

    esttab using myfile.csv, 
    b(%5.3F) 
    p(%6.4f) 
    se(%5.2f) 
    t
    star(*0.1 **0.05 ***0.01) 
    nostar
    title(XXX) 
    note(XXX) 
    scalars( F R2)
    

    解释:csv格式输出(默认为txt格式,可换其他格式,如xls,doc等。)

    1. b(%5.3F) 表示系数,占5个字符,小数点保留3位;
    2. p(%6.4f) 表示p值输出,占6个字符,小数点保留4位(如果字符不够,前面用空格表示);
    3. se(%5.2f) 表示输出SE,五个字符,小数点保留2位
    4. t报告t值同上
    5. star表示用***表示显著性;
    6. nostar表示不想加星星
    7. title: XXX
    8. note:其他注释。如果上面规定了star,这里会另有注释
    9. scalar,其他想要的标量如F值,R2等

    6. 描述性统计

    summarize, detail 下的指标包括:均值(mean),百分位数(p),四个最小值和四个最大值(min,max),权数,方差(var),标准差(sd),偏度(skewness),峰度(kurtosis)
    tabstat是对sum指令的灵活替代。
    对称分布,偏度值为0;正偏态,偏度值>0;负偏态,偏度值<0;
    正态分布,峰度值为3;尖峰厚尾,峰度>3,宽峰轻尾,峰度<3。

    *** 1.tabstat,展示设置的统计量如mean、p25等,可以用by
    tabstat var1 stat(me sd N min max p25), by(var2)
    *** 2.tabulate,展示非缺失值的频数分布表
    tab var1
    
    tab1 var1 var2 var3 /*输出三个一维表格*/
    
    tab2 var1 var2 var3 /*输出三个二维交互表*/
    
    tab var1 var2, chi  /*输出二维交互表并求卡方*/
    
    *** 3.概要描述 均值、标准差、最小最大值、N
    sum var1
    
    *** 4.详细描述 百分位数、中位数、均值、标准差、方差、偏度、峰度
    sum var1, detail
    
    *** 5. 单变量多组分类描述
    tab factor1, sum(var2)
    
    *** 6.双变量多组别分类描述
    tab factor1 factor2 ,sum(var3)
    
    *** 7.R*C表
    ***确切概率法对2列3行表做卡方检验,chi值以行排列
    tabi 28 9 \ 18 20 \ 10 24,row chi2 exact 
    *** 4列2行表
    tabi 12 20 8 16 \ 5 13 7 22,chi
    
    *** 8. 四格表资料
    mcci 18 20 35 46
    

    7. 秩和检验

    ***两组资料
    rank sum var1, by(var2)
    *** 多组资料
    kwallis var1 ,by(var2)
    *** 分类多组
    sort var1
    by var1: rank sum var2 ,by(var3)
    

    8.回归

    1. 多分类自变量设置对照组
    reg  Y ib2.X1 X2  ib1.X3
    *** 变量X1,这只2为对照组;变量X3,设置1为对照组。
    *** ib#.          use # as base, #=value of variable
    *** ib(##).       use the #th ordered value as base (**)
    *** ib(first).    use smallest value as base (the default)
    *** ib(last).     use largest value as base
    *** ib(freq).     use most frequent value as base
    *** ibn.          no base level
    
    1. mlog设置reference group
    *** 对因变量Y,设置2位对照组。。。记住Y前面不加i.
    mlog Y X1 X2 X3,base(2)
    
    1. 输出robust Std. Err.
    reg Y X1 X2 X3, vce(robust)
    
    1. 替换所有非数值变量为数值变量
    destring _all,replace
    
    1. 帮助文件
    help fvvarlist
    

    9.变量类型转换

    *数值转字符
    gen newid=string(id)
    或者tostring id,gen(newid)
    *字符转数值
    但是不建议把数字格式转化成字符格式,尤其是像这种id格式‘000010’.
    更好的办法是把id转换成数字格式
    encode id, gen(newid)
    

    10.字符串截取

    gen newvar = substr(oldvar,n1,n2)
    #解释:产生新变量,其值为远字符串变量的第n1位到n2位。
    

    11.模糊匹配

    参见文章:
    模糊匹配

    https://www.lianxh.cn/news/06cf887d0c850.html

    学习笔记随时更新
    小伙伴们可以关注微信公众号“小陈统计”,回复stata,获取stata学习资料。
    下方扫码关注
    在这里插入图片描述

    展开全文
  • Stata的资深爱好者开发并提供了stata_kernel ,使Stata可以在Jupyter Notebook中使用。 查看有关设置和安装的更多信息。 否则, 是一个工作示例。 2.2.4。 geoplotipeds.do 2.2.5。 Facradar.do 2.2.6。 ...
  • sata 随机前沿 do文件 PPT和数据
  • 数据的读取与查看读取数据集:use 路径(.dta)读取Stata系统中的数据:sysuse 文件名清除上一个数据集:clear查看数据集:browse(表格形式)/list(清单形式)查看从第a行到第b行的数据:list in a/b查看符合某一...
  • 比如,初学者可以按照文章所使用的软件进行检索,网站中覆盖了 32 种统计软件,我们可以选择stata,然后找到数以百计的可复制资源,并链接到原始网站。值得一提的是,该网站为一篇文章打了很多标签,以至于你可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,384
精华内容 1,353
关键字:

stata代码