生成带有奇数和偶数标签的变量

时间:2018-09-22 20:14:57

标签: stata

我有一个变量num,其值为1-10

我想用值typeodd创建一个新变量even

gen type = odd if inlist(num, 1,3,5,7,9)

问题:

  1. 同时标记偶数的最干净方法是什么?

  2. 我可以在某个地方使用一个否定词并将命令全部保留在一行吗?

2 个答案:

答案 0 :(得分:1)

您提供的代码无效的语法:

clear
set obs 10
generate num = _n

generate type = odd if inlist(num, 1,3,5,7,9)
odd not found
r(111);

您可以通过以下方式获得想要的东西:

generate type = "odd" if inlist(num, 1,3,5,7,9)

您可以使用cond()函数同时做这两项:

generate type = cond(inlist(num, 1,3,5,7,9), "odd", "even")

但是,将此变量用作 string 的价值有限,以备后用。

您随后可以使用encode命令创建一个数字类型的新变量:

encode type, generate(type2)

list

     +--------------------+
     | num   type   type2 |
     |--------------------|
  1. |   1    odd     odd |
  2. |   2   even    even |
  3. |   3    odd     odd |
  4. |   4   even    even |
  5. |   5    odd     odd |
     |--------------------|
  6. |   6   even    even |
  7. |   7    odd     odd |
  8. |   8   even    even |
  9. |   9    odd     odd |
 10. |  10   even    even |
     +--------------------+

typetype2变量虽然看似相同,但实际上是不同的类型:

list, nolabel

     +--------------------+
     | num   type   type2 |
     |--------------------|
  1. |   1    odd       2 |
  2. |   2   even       1 |
  3. |   3    odd       2 |
  4. |   4   even       1 |
  5. |   5    odd       2 |
     |--------------------|
  6. |   6   even       1 |
  7. |   7    odd       2 |
  8. |   8   even       1 |
  9. |   9    odd       2 |
 10. |  10   even       1 |
     +--------------------+

这是将type用作数字变量的方法:

generate type = mod(num, 2)

list

     +------------+
     | num   type |
     |------------|
  1. |   1      1 |
  2. |   2      0 |
  3. |   3      1 |
  4. |   4      0 |
  5. |   5      1 |
     |------------|
  6. |   6      0 |
  7. |   7      1 |
  8. |   8      0 |
  9. |   9      1 |
 10. |  10      0 |
     +------------+

然后您创建值标签并将其附加到变量type

label define numlab 0 "even" 1 "odd"
label values type numlab

list

     +------------+
     | num   type |
     |------------|
  1. |   1    odd |
  2. |   2   even |
  3. |   3    odd |
  4. |   4   even |
  5. |   5    odd |
     |------------|
  6. |   6   even |
  7. |   7    odd |
  8. |   8   even |
  9. |   9    odd |
 10. |  10   even |
     +------------+

如果您只希望标记有奇数,则只需执行以下操作:

label define numlab 1 "odd"

如果以后改变主意并希望为偶数添加标签:

label define numlab 0 "even", add

答案 1 :(得分:0)

运行命令后,奇数类型的值为“ odd”,偶数类型的值为“”,即缺少字符串。 您可以使用

标记偶数
replace type = "even" if type==""

我想不出一种将其全部保留在一行中的方法,因为您必须同时生成变量并填写两个不同的字符串值。

如果您可以使用数字变量(我将其命名为标志)作为类型变量,则可以尝试以下操作:

gen flag = mod(num,2)

这会将奇数标记为1,将偶数标记为0。然后,如果需要将其变量显示为“ odd”和“ even”,则可以为flag变量创建一个标签。