首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不破坏数据的情况下在Stata中重新编码分类变量的级别

在不破坏数据的情况下在Stata中重新编码分类变量的级别
EN

Stack Overflow用户
提问于 2021-09-22 14:39:56
回答 2查看 36关注 0票数 1

我有这个变量,它接受以下值:

代码语言:javascript
复制
     tab expenditure
   
                            Q11 |      Freq.     Percent        Cum.
--------------------------------+-----------------------------------
                  Afs 2500-5000 |         24        3.84        3.84
                  Afs 5000-7500 |         89       14.24       18.08
                 Afs 7500-10000 |        235       37.60       55.68
I don't know / refuse to answer |          9        1.44       57.12
             Less than Afs 2500 |          5        0.80       57.92
            More than Afs 10000 |        263       42.08      100.00
--------------------------------+-----------------------------------
                          Total |        625      100.00

我想更改排序,这样类别就不是按字母顺序排列的。我试着用

代码语言:javascript
复制
label define expenditure 1 "Less than Afs 2500" 2 "Afs 2500-5000" 3 "Afs 5000-7500" 4 "Afs 7500-10000" 5 "More than Afs 10000" 6 "I don't know / refuse to answer", replace

我还试着使用

代码语言:javascript
复制
recode expenditure (1 = 5) (2 = 1) (3 = 2) (4 = 3) (5 = 6) (6 = 4)

然而,这两种方法都只是改变了标签,而不是底层数据,现在数据变得一团糟(注意频率的变化,现在“超过Afs 10000”类别只有24个观测值,而不是以前的263个)。

代码语言:javascript
复制
tab expenditure

                            Q11 |      Freq.     Percent        Cum.
--------------------------------+-----------------------------------
             Less than Afs 2500 |         89       14.24       14.24
                  Afs 2500-5000 |        235       37.60       51.84
                  Afs 5000-7500 |          9        1.44       53.28
                 Afs 7500-10000 |        263       42.08       95.36
            More than Afs 10000 |         24        3.84       99.20
I don't know / refuse to answer |          5        0.80      100.00
--------------------------------+-----------------------------------
                          Total |        625      100.00

到底怎么回事?如何才能在不影响底层数据的情况下对此进行更改?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-22 15:30:36

如果您expenditure变量是字符串,那么您可以像这样使用label defineencode

代码语言:javascript
复制
. clear 

. input str31 expenditure int freq 

                         expenditure      freq
  1.                   "Afs 2500-5000"        24        
  2.                   "Afs 5000-7500"        89      
  3.                  "Afs 7500-10000"       235      
  4. "I don't know / refuse to answer"         9        
  5.              "Less than Afs 2500"         5        
  6.             "More than Afs 10000"       263   
  7. end 

. label def expenditure 1 "Less than Afs 2500" 2 "Afs 2500-5000" 3 "Afs 5000-7500" 4 "Afs 7500-10000" 5 "More than Afs 10000" 6 "I don't know / refuse to answer"


. encode expenditure, gen(expenditure2) label(expenditure)


. label var expenditure2 "expenditure"


. tab expenditure2 [fw=freq]

                    expenditure |      Freq.     Percent        Cum.
--------------------------------+-----------------------------------
             Less than Afs 2500 |          5        0.80        0.80
                  Afs 2500-5000 |         24        3.84        4.64
                  Afs 5000-7500 |         89       14.24       18.88
                 Afs 7500-10000 |        235       37.60       56.48
            More than Afs 10000 |        263       42.08       98.56
I don't know / refuse to answer |          9        1.44      100.00
--------------------------------+-----------------------------------
                          Total |        625      100.00

但是,您的变量似乎是数字的,所以就好像您这样做了:

代码语言:javascript
复制
. clear 

. input byte expenditure int freq 

     expend~e      freq
  1. 1                       24        
  2. 2                       89      
  3. 3                      235      
  4. 4                        9        
  5. 5                        5        
  6. 6                      263   
  7. end 

. label def expenditure 5 "Less than Afs 2500" 1 "Afs 2500-5000" 2 "Afs 5000-7500" 3 "Afs 7500-10000" 6 "More than Afs 10000" 4 "I don't know / refuse to answer"

. label val expenditure expenditure 

现在的问题是,您需要重新定义值标签以及应用recode

代码语言:javascript
复制
. recode expenditure 5=1 1=2 2=3 3=4 4=6 6=5 5=6 
(6 changes made to expenditure)


. tab expenditure [fw=freq]

                    expenditure |      Freq.     Percent        Cum.
--------------------------------+-----------------------------------
                  Afs 2500-5000 |          5        0.80        0.80
                  Afs 5000-7500 |         24        3.84        4.64
                 Afs 7500-10000 |         89       14.24       18.88
I don't know / refuse to answer |        235       37.60       56.48
             Less than Afs 2500 |        263       42.08       98.56
            More than Afs 10000 |          9        1.44      100.00
--------------------------------+-----------------------------------
                          Total |        625      100.00

. label def expenditure 1 "Less than Afs 2500" 2 "Afs 2500-5000" 3 "Afs 5000-7500" 4 "Afs 7500-10000" 5 "More than Afs 10000" 6 "I don't know / refuse to answer", modify


. tab expenditure [fw=freq]

                    expenditure |      Freq.     Percent        Cum.
--------------------------------+-----------------------------------
             Less than Afs 2500 |          5        0.80        0.80
                  Afs 2500-5000 |         24        3.84        4.64
                  Afs 5000-7500 |         89       14.24       18.88
                 Afs 7500-10000 |        235       37.60       56.48
            More than Afs 10000 |        263       42.08       98.56
I don't know / refuse to answer |          9        1.44      100.00
--------------------------------+-----------------------------------
                          Total |        625      100.00
票数 1
EN

Stack Overflow用户

发布于 2021-09-22 15:45:35

我想通了。

代码语言:javascript
复制
label define order2 1 "Less than Afs 2500" 2 "Afs 2500-5000" 3 "Afs 5000-7500" 4 "Afs 7500-10000" 5 "More than Afs 10000" 6 "I don't know / refuse to answer"

encode expenditure, gen(expenditure2) label(order2)

在不改变数据的情况下做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69286431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档