0

对于几个国家/地区,我有一个数据集,我想vlist为每个国家/地区保留一个变量列表(在 global 中指定)。有些变量在某些国家不存在。

我希望 Stata 忽略这些变量的不存在并keep为其余变量执行命令。然而,问题是for国家层面的额外循环,我正在努力融入。

这个问题类似于这些线程中提出的问题:

最终,我希望为每个国家/地区提供一个数据集,该数据集仅包含在 中指定的那些变量vlist(减去那些vlist不存在的变量)。

这是代码,主要取自上面的线程:

clear all
set obs 5

local vlist v0 v1 v2 v3 v4 v5

foreach v of local vlist { 
    generate `v' = runiform()
}

save country1.DTA, replace
save country2.DTA, replace
save country3.DTA, replace

global vlist_example v0 v1 v6          // v6 is not part of the dataset

foreach country in country1 country2 country3 {
   local keeplist = ""
      foreach i of global vlist_example {
          capture confirm variable `i'
              if !rc {
                  local "`keeplist' `i'"
          }
      }
keep `keeplist'     
save `country'beta2.DTA, replace 

}

但是,这会产生以下错误:

rc not found
r(111);

我希望这充分描述了我的问题,但如果有什么需要更多解释,请告诉我。

4

2 回答 2

1

您的代码的主要问题是您没有调用每个数据集来相应地修改它。

以下应该给你你想要的:

clear all
set obs 5

local vlist v0 v1 v2 v3 v4 v5

foreach v of local vlist { 
    generate `v' = runiform()
}

save country1, replace
save country2, replace
save country3, replace

global vlist_example v0 v1 v6          // v6 is not part of the dataset

foreach country in country1 country2 country3 {
    use `country'.dta, clear
    local keeplist ""
    foreach i of global vlist_example {
        capture confirm variable `i'
        if !_rc {
            local keeplist "`keeplist' `i'"
        }
    }
    keep `keeplist'     
    save `country'beta2, replace 
}

请注意,之后capture您需要键入!_rc不是 !rc.

于 2018-05-14T12:12:23.633 回答
0

这是一个寻找各种名称列表交集的练习。

local wanted v0 v1 v6    

foreach set in country1 country2 country3 { 
   use `set', clear 
   describe, varlist 
   local this `r(varlist)' 
   local exist : list wanted & this 
   keep `exist'
   * save command here 
} 

请注意,绝对不需要循环名称。

于 2018-05-14T12:24:30.387 回答