当某些变量不存在时保留变量列表
Keep a list of variables when some variables don't exist
对于几个国家,我有一个数据集,我想为每个国家保留一个变量列表(在全局 vlist
中指定)。有些变量在某些国家不存在。
我想让Stata忽略这些变量的不存在,对剩下的变量执行keep
命令。然而,问题是国家层面的额外 for
循环,我正在努力合并。
此问题类似于以下线程中提出的问题:
Stata. How to `keep` a list of variables given some of them may not exist?
最终,我想为每个国家/地区创建一个数据集,该数据集仅包含 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);
我希望这足以说明我的问题,但如果需要更多解释,请告诉我。
你的代码的主要问题是你没有调用每个数据集来相应地修改它。
以下应该能满足您的需求:
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
.
这是一个寻找各种名称列表的交集的练习。
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
}
请注意,绝对不需要遍历名称。
对于几个国家,我有一个数据集,我想为每个国家保留一个变量列表(在全局 vlist
中指定)。有些变量在某些国家不存在。
我想让Stata忽略这些变量的不存在,对剩下的变量执行keep
命令。然而,问题是国家层面的额外 for
循环,我正在努力合并。
此问题类似于以下线程中提出的问题:
Stata. How to `keep` a list of variables given some of them may not exist?
最终,我想为每个国家/地区创建一个数据集,该数据集仅包含 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);
我希望这足以说明我的问题,但如果需要更多解释,请告诉我。
你的代码的主要问题是你没有调用每个数据集来相应地修改它。
以下应该能满足您的需求:
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
.
这是一个寻找各种名称列表的交集的练习。
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
}
请注意,绝对不需要遍历名称。