给出以下数据集和命令:
sysuse auto, clear
generate x = .
replace x = 5 if price == 4099
replace x = 5 if price == 4749
如果x
属于值列表,我想生成一个等于5
的新变量price
。
以下命令未生成x
的新值,并且是错误的:
replace x = 5 if price == 4099 & price == 4749
我需要一种更简单的单行方法,该方法不涉及以上面的代码替换x
的方式,这种方法虽然有效,但是却乏味且不雅。
答案 0 :(得分:2)
您需要使用'或'(|
)而不是'和'(&
):
sysuse auto, clear
generate x = .
replace x = 5 if price == 4099
replace x = 5 if price == 4749
generate y = 5 if price == 4099 | price == 4749
或者,您可以使用inlist()
函数:
generate z = 5 if inlist(price, 4099, 4749)
结果:
list price x y z in 1 / 5
+-------------------+
| price x y z |
|-------------------|
1. | 4,099 5 5 5 |
2. | 4,749 5 5 5 |
3. | 3,799 . . . |
4. | 4,816 . . . |
5. | 7,827 . . . |
+-------------------+