如何在数据集中列出负值?

时间:2018-10-23 14:30:28

标签: stata

我正在使用大约100个变量和1000行的数据集,类似于下面的数据集:

.      var1  var2  var3  var4
AL      10    11    12     13 
AK      -1    0      0     18
AZ      5     -5    -2     22
VA      15    16     0      0

如何列出具有负值的变量/观测值?

例如,我想列出AK具有负var1AZ具有负var2var3

2 个答案:

答案 0 :(得分:2)

以下是如何为每个var变量创建标记变量的示例:

clear

input   str2 state  var1  var2  var3  var4
AL      10    11    12     13 
AK      -1    0      0     18
AZ      5     -5    -2     22
VA      15    16     0      0
end

foreach var in var1 var2  var3  var4 {
    generate tag_`var' = `var' < 0
}

list

     +-------------------------------------------------------------------------------+
     | state   var1   var2   var3   var4   tag_var1   tag_var2   tag_var3   tag_var4 |
     |-------------------------------------------------------------------------------|
  1. |    AL     10     11     12     13          0          0          0          0 |
  2. |    AK     -1      0      0     18          1          0          0          0 |
  3. |    AZ      5     -5     -2     22          0          1          1          0 |
  4. |    VA     15     16      0      0          0          0          0          0 |
     +-------------------------------------------------------------------------------+

然后您可以执行以下操作:

list state var1 if tag_var1 == 1

     +--------------+
     | state   var1 |
     |--------------|
  2. |    AK     -1 |
     +--------------+

list state var* if tag_var1 == 1 | tag_var2 == 1 | tag_var3 == 1 | tag_var4 == 1

     +-----------------------------------+
     | state   var1   var2   var3   var4 |
     |-----------------------------------|
  2. |    AK     -1      0      0     18 |
  3. |    AZ      5     -5     -2     22 |
     +-----------------------------------+

如果您不需要标记变量的额外灵活性,只需执行以下操作即可:

list state var1 if var1 < 0

编辑:

或者,您可以执行以下操作:

preserve

generate obsno = _n
reshape long var, i(obsno)

rename var value
generate var = "var" + string(_j)

list state var obsno value if value < 0, noobs sepby(state)

  +------------------------------+
  | state    var   obsno   value |
  |------------------------------|
  |    AK   var1       2      -1 |
  |------------------------------|
  |    AZ   var2       3      -5 |
  |    AZ   var3       3      -2 |
  +------------------------------+

restore

答案 1 :(得分:1)

可以提及其他两种技术。一种是计算每个观察值(行)中的最小值,然后当且仅当该最小值为负时,才list。这样,您在相同的观测值中也会得到零,正数和缺失。

另一种方法是分别循环遍历变量和list

clear 
input str2 state   var1  var2  var3  var4
AL      10    11    12     13 
AK      -1    0      0     18
AZ      5     -5    -2     22
VA      15    16     0      0
end 

egen min = rowmin(var*) 

list if min < 0 

     +-----------------------------------------+
     | state   var1   var2   var3   var4   min |
     |-----------------------------------------|
  2. |    AK     -1      0      0     18    -1 |
  3. |    AZ      5     -5     -2     22    -5 |
     +-----------------------------------------+


foreach v of var var* { 
    quietly count if `v' < 0 
    if r(N) list `v' if `v' < 0 
} 

     +------+
     | var1 |
     |------|
  2. |   -1 |
     +------+

     +------+
     | var2 |
     |------|
  3. |   -5 |
     +------+

     +------+
     | var3 |
     |------|
  3. |   -2 |
     +------+