如何创建字符串变量列表并将其更改为带小数的数值变量?

问题描述 投票:0回答:1

我有一个数据集,大约一半的列包含“是”“否”和“也许”的字符串响应。我有所有列的变量名,因此循环响应是理想的选择。有些专栏没有任何“也许”的回答,只有“是”和“否”。

我正在尝试将所有“是”答案转换为数字 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 分配给“也许”)。

你会如何解决这个问题?

string stata numeric
1个回答
0
投票

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"
}
© www.soinside.com 2019 - 2024. All rights reserved.