Stata数据清理
Stata Data cleaning
我在 Stata 数据转换方面需要一些帮助。
我有一个调查,用户可以用编码为整数 98 的“无响应”来回答。变量可以是不同的数据类型。我需要将用户的“无响应”/98 的数量获取到一个单独的变量中。
我附上了数据集示例:
UserN Q1 Q2 Q3 Q4 Q5 Q6 NewCreatedColumn
User1 11 "male" "12:55pm" 98 "Answer1" "other" 1
User2 98 "female" "1:00am" 98 "AnswerX" "Batman" 2
User3 16 "male" "1:00am" 34 "other" "superman" 0
User4 98 "female" "1:00am" 98 "other" "Dog" 2
User5 66 "male" "1:00am" 98 "Life" "Cat" 1
这在 python 中相当容易,数据框中的每个用户都是一个列表,您可以在列表中扫描整数 98。
Stata 中是否有等效项?
Sample Data
感谢数据示例,下面进行了改进以成为可重现的代码。另请参见 Stata 中的 help dataex
(或古代 Stata 中的 search dataex
)。
clear
input str5 UserN Q1 str7 (Q2 Q3) Q4 str8 (Q5 Q6) NewCreatedColumn
User1 11 "male" "12:55pm" 98 "Answer1" "other" 1
User2 98 "female" "1:00am" 98 "AnswerX" "Batman" 2
User3 16 "male" "1:00am" 34 "other" "superman" 0
User4 98 "female" "1:00am" 98 "other" "Dog" 2
User5 66 "male" "1:00am" 98 "Life" "Cat" 1
end
ds Q* , has(type numeric)
egen wanted = anycount(`r(varlist)'), values(98)
为了计算字符串foo
,一个循环就可以了
ds Q*, has(type string)
gen WANTED = 0
quietly foreach v in `r(varlist)' {
replace WANTED = WANTED + (`v' == "foo")
}
我在 Stata 数据转换方面需要一些帮助。
我有一个调查,用户可以用编码为整数 98 的“无响应”来回答。变量可以是不同的数据类型。我需要将用户的“无响应”/98 的数量获取到一个单独的变量中。
我附上了数据集示例:
UserN Q1 Q2 Q3 Q4 Q5 Q6 NewCreatedColumn
User1 11 "male" "12:55pm" 98 "Answer1" "other" 1
User2 98 "female" "1:00am" 98 "AnswerX" "Batman" 2
User3 16 "male" "1:00am" 34 "other" "superman" 0
User4 98 "female" "1:00am" 98 "other" "Dog" 2
User5 66 "male" "1:00am" 98 "Life" "Cat" 1
这在 python 中相当容易,数据框中的每个用户都是一个列表,您可以在列表中扫描整数 98。
Stata 中是否有等效项?
Sample Data
感谢数据示例,下面进行了改进以成为可重现的代码。另请参见 Stata 中的 help dataex
(或古代 Stata 中的 search dataex
)。
clear
input str5 UserN Q1 str7 (Q2 Q3) Q4 str8 (Q5 Q6) NewCreatedColumn
User1 11 "male" "12:55pm" 98 "Answer1" "other" 1
User2 98 "female" "1:00am" 98 "AnswerX" "Batman" 2
User3 16 "male" "1:00am" 34 "other" "superman" 0
User4 98 "female" "1:00am" 98 "other" "Dog" 2
User5 66 "male" "1:00am" 98 "Life" "Cat" 1
end
ds Q* , has(type numeric)
egen wanted = anycount(`r(varlist)'), values(98)
为了计算字符串foo
,一个循环就可以了
ds Q*, has(type string)
gen WANTED = 0
quietly foreach v in `r(varlist)' {
replace WANTED = WANTED + (`v' == "foo")
}