Stata:如何一条一条的采集数据

2019-09-30  本文已影响0人  王美庭

作者:王美庭

我的主页:| 简书 | CSDN |

一、引言

很多时候,我们不能一下子生成所有的数据,而是需要在某个特定的循环中一条一条的去采集数据,然后再利用采集到的数据进行后面的数据分析。

那么如何达到这样的要求,本文介绍两个方法。

  1. 当数据量小于 10000 时,采用矩阵过渡的方法,这样无需生成中间文件或设置临时文件名。
  2. 当数据量超过 10000 时,采用 post 系列命令,可以使其不受数据量的限制。

二、矩阵法

代码如下:

*----------目的:收集多次随机抽样中回归的系数和对应的标准误-----------------
sysuse nlsw88.dta, clear
local reps = 200    //设置抽样次数
set seed 123456     //设定种子数

local varlist "wage age race married hours"
gettoken y x: varlist
local word_num: word count `x'
tokenize "`x'"

mat A = J(`reps',`word_num'*2,.)
forvalues i = 1(1)`reps'{
    preserve
    bsample          //自抽样
    qui reg `varlist'
    local j = 1
    while "``j''" != "" {
        mat A[`i',2*`j'-1] = _b[``j'']
        mat A[`i',2*`j'] = _se[``j++'']
    }
    restore
 }
clear
svmat A, names(a)
local j = 1
while "``j''" != "" {
    rename a`=2*`j'-1' b_``j''
    rename a`=2*`j'' se_``j++''
}

三、post 法

代码如下:

*--------目的:收集多次随机抽样中回归的系数和对应的标准误-----------------
cd "E:\exercise\"
sysuse nlsw88.dta, clear
local reps = 10    //设置抽样次数
set seed 123456     //设定种子数

local varlist "wage age race married hours"
gettoken y x: varlist
local word_num: word count `x'
tokenize "`x'"

local j = 1
local st1 ""
local st2 ""
while "``j''" != "" {
    local st1 "`st1'b_``j'' se_``j'' "
    local st2 "`st2'(_b[``j'']) (_se[``j++'']) "
}

capture postclose wmtpost
tempfile temp
postfile wmtpost `st1' using "`temp'", replace
forvalues i = 1/`reps'{
    preserve
    bsample        //自抽样
    qui reg `varlist'
    post wmtpost `st2'
    restore
}
postclose wmtpost
use "`temp'", clear
上一篇 下一篇

猜你喜欢

热点阅读