To populate missing data with a fixed range of values
我想检查如何使用一系列值填充列aktype
(同一个pidlink的值范围始终固定为下面列出的11种类型的值),以便那些具有缺失值的单元格。我有大约17,000多个缺失的观察结果。
值的范围如下: 一个 乙 C d Ë G H 一世 Ĵ ķ →
我尝试了以下命令,但它不起作用: -
foreach x of varlist aktype=1/11 {
replace aktype = "A" in 1 if aktype==""
replace aktype = "B" in 2 if aktype==""
replace aktype = "C" in 3 if aktype==""
replace aktype = "D" in 4 if aktype==""
replace aktype = "E" in 5 if aktype==""
replace aktype = "G" in 6 if aktype==""
replace aktype = "H" in 7 if aktype==""
replace aktype = "I" in 8 if aktype==""
replace aktype = "J" in 9 if aktype==""
replace aktype = "K" in 10 if aktype==""
replace aktype = "L" in 11 if aktype==""
}
如果您可以建议使用正确的命令,那将非常感激。非常感谢!
答案 0 :(得分:0)
我会生成一个变量AK
,在1-11位(和12-22和23-33等等)中有字母A-K。使用此变量AK
的值替换缺失值。
* generate data
clear
set obs 20
generate aktype = ""
replace aktype = "foo" in 1/1
replace aktype = "bar" in 10/12
* generate variable with letters A-K
generate AK = char(65 + mod(_n - 1, 11))
* fill missing values
replace aktype = AK if missing(aktype)
list
这产生以下结果。
. list
+-------------+
| aktype AK |
|-------------|
1. | foo A |
2. | B B |
3. | C C |
4. | D D |
5. | E E |
|-------------|
答案 1 :(得分:0)
这首先解决了“它不起作用”的评论。
通常,在这种论坛中,您应该始终具体并准确地说出发生了什么,即代码发生故障的地方以及结果是什么(例如,您获得的错误消息)。如有必要,请添加为什么不是您想要的。
具体来说,在这种情况下,Stata将不会超过
foreach x of varlist aktype=1/11
这是非法的(以及Stata程序员不清楚)。
您可以遍历 varlist 。在这种情况下,循环单个变量aktype
是合法的。 (这通常是毫无意义的,但这是风格,而不是语法。)所以这是合法的:
foreach x of varlist aktype
顺便提一下,您将x
定义为循环参数,但从不在循环内引用它。这不违法,但这是不寻常的。
您还可以遍历 numlist ,例如
foreach x of numlist 1/11
虽然
forval x = 1/11
是一种更直接的方式。所有这些都来自相关命令的语法图,其中禁止任何未明确允许的内容。
当您需要循环 varlist 和 numlist 时,您需要使用不同的语法,但最好的方法取决于确切的问题。
现在问题的第二个问题:我无法在问题中看到任何类型的规则,通过A
将值分配给L
,因此无法提出正面建议。