我有一个变量num
,其值为1-10
。
我想用值type
或odd
创建一个新变量even
:
gen type = odd if inlist(num, 1,3,5,7,9)
问题:
同时标记偶数的最干净方法是什么?
我可以在某个地方使用一个否定词并将命令全部保留在一行吗?
答案 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 |
+--------------------+
type
和type2
变量虽然看似相同,但实际上是不同的类型:
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变量创建一个标签。