我有一个数据集,大约一半的列包含“是”“否”和“也许”的字符串响应。我有所有列的变量名,因此循环响应是理想的选择。有些专栏没有任何“也许”的回答,只有“是”和“否”。
我正在尝试将所有“是”答案转换为数字 1,将所有“可能”答案转换为数字 0.5,将所有“否”答案转换为数字 0。
我首先尝试了以下操作(我有很长的列列表,所以我尝试创建所有字符串的 varlist):
vl create yesnomaybe = (variable1 variable2)
foreach var of varlist yesnomaybe {
replace `var' = strtrim(strproper(`var'))
replace `var' = ".m" if !inlist(`var', "No", "Yes", "Maybe")
replace `var' = "0" if `var' == "No"
replace `var' = "0.5" if `var' == "Maybe"
replace `var' = "1" if `var' == "Yes"
}
destring yesnomaybe, replace
但是,我在第一行之后收到错误。它告诉我我无法用字符串创建 varlist!
我还尝试使用标签定义和编码,但标签定义仅适用于整数! (不能将 0.5 分配给“也许”)。
你会如何解决这个问题?
vl create
不是我曾经使用过的命令。我怀疑这里是否真的有帮助。如果我正确理解你的问题,那当然不需要。
我不会践踏原始数据。
这是一个更简单的代码草图,可以扩展到多个变量。只需在 varlist 中放入更多变量名称即可。请务必根据口味和情况更改后缀
2
。
gen work = ""
foreach var of varlist yesnomaybe {
replace `work' = strtrim(strproper(`var'))
gen `var'2 = .m if !inlist(`work', "No", "Yes", "Maybe")
replace `var'2 = 0 if `work' == "No"
replace `var'2 = 0.5 if `work' == "Maybe"
replace `var'2 = 1 if `work' == "Yes"
}