如何根据固定条件在列中填充字符串变量的缺失值

时间:2016-05-20 13:20:21

标签: stata

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=="" 
    }

如果您可以建议使用正确的命令,那将非常感激。非常感谢!

2 个答案:

答案 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,因此无法提出正面建议。