对于多个国家/地区,我有一个数据集,我想为每个数据集保留一个变量列表(在全局vlist
中指定)。某些国家/地区不存在某些变量。
我希望Stata忽略这些变量的不存在,并为其余变量执行keep
命令。但是,问题是国家层面的额外for
循环,我正在努力融入。
这个问题类似于这些主题中提出的问题:
Stata. How to `keep` a list of variables given some of them may not exist?
How do I confirm existence of all respective variables of a variable list?
最终,我希望最终得到每个国家/地区的数据集,这些数据集只包含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);
我希望这充分描述了我的问题,但如果有什么需要更多解释,请告诉我。
答案 0 :(得分:2)
您的代码的主要问题是您不会调用每个数据集来相应地修改它。
以下内容可为您提供所需内容:
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
。
答案 1 :(得分:1)
这是寻找各种名单的交叉点的练习。
let initials: String = string
.split(" ") // create an iterator, yielding words
.flat_map(|s| s.chars().nth(0)) // get the first char of each word
.collect(); // collect the result into a String
请注意,绝对不需要循环遍历名称。