替换类型不匹配(数字到字符串)

Replace type mismatch (numeric to string)

我想在 Stata age_cat 中基于 age 创建一个新变量。我的代码:

gen age_cat = age
replace age_cat = "Adult" if age>18 | "0-5 years" if age >=0 & age<=5 | "6-11 years" if age>=6 & age<=11 | "12-18 years" if age>=12 & age<=18

我收到类型不匹配错误:

type mismatch
r(109);

我该如何解决这个问题?我知道 encode 可以将字符串替换为数字。有没有办法反过来做?

直接错误很简单。您将 age 复制到 age_cat,因此 age_cat 显然是一个数字变量,就像 age 一样。然后您尝试使用字符串值 replace 它。那是 type mismatch 并且 Stata 摆脱了困境。

或者,如果age确实是一个字符串变量,那么将其与18等数值进行比较也是一个type mismatch

您的其余语法无论如何都会失败。逻辑运算符|(或)可用于分隔输入条件。它永远不能用于分隔不同的结果。

假设 age 是数字:

gen age_cat =  "Adult" if inrange(age, 19, .) 
replace age_cat = "12-18 years" if inrange(age, 12, 18)
replace age_cat = "6-11 years" if inrange(age, 6, 11) 
replace age_cat = "0-5 years" if inrange(age, 0, 5) 

我添加了代码,这样算作超过 18 岁的缺失年龄将不会被归类为 Adult

这是另一种方法:

gen age_cat = cond(age > 18, "Adult", cond(age >= 12, "12-18 years", cond(age >= 6, "6-11 years", "0-5 years))) if age < . 

我在其中设置了明确的缺失值陷阱。 cond() 等同于各种语言中的 ifelse()。如果您需要更多详细信息,另请参阅 this tutorial

还有recode,吸引了很多人