楼主: smztsmzt
4355 2

[学习心得] 数据清理—拆分多选题为哑变量形式 [推广有奖]

  • 0关注
  • 9粉丝

已卖:1516份资源

硕士生

4%

还不是VIP/贵宾

-

威望
0
论坛币
2984 个
通用积分
407.5325
学术水平
73 点
热心指数
72 点
信用等级
62 点
经验
1206 点
帖子
51
精华
0
在线时间
131 小时
注册时间
2011-4-7
最后登录
2025-3-17

楼主
smztsmzt 在职认证  发表于 2018-10-24 13:26:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
多选题在设置录入文件时一般按照哑变量设置,即多选题每个选项都设置为0/1,录入的时候需要在每个选项录入0或1,当多项选择题目数量较多或选项数量较多时,采用上述方法录入工作量较大,此时可以将多选题设置为字符类型,直接录入问卷实际的所有选项。

例如 F7 您患有以下哪些慢性病:1、高血压 2、糖尿病 3、高血脂 4、COPD
       答卷实际勾选为 1,2,4

       采用哑变量录入设置为 F7-1 = 1
                                           F7-2 = 1
                                           F7-3 = 0
                                           F7-4 = 1
        
       采用实际选项录入设置为 F7 = 1,2,4

       这种录入方式需要在后期数据清理时进行拆分,拆分为哑变量形式,以下是如何拆分多选题的代码,可以比较拆分后的哑变量与原来变量的结果

  1. /***********************************************
  2. 拆分多选题为哑变量形式

  3. 多选题在设置录入文件时一般按照哑变量设置,即多选题每个选项都设置为0/1,录入的时候需要
  4. 在每个选项录入0或1,当多项选择题目数量较多或选项数量较多时,采用上述方法录入工作量较大,此时
  5. 可以将多选题设置为字符类型,直接录入问卷实际的所有选项。

  6. 例如
  7. F7 您患有以下哪些慢性病:1、高血压 2、糖尿病 3、高血脂 4、COPD
  8.      答卷实际勾选为 1,2,4
  9.    
  10.         采用哑变量录入设置为 F7-1 = 1
  11.                                             F7-2 = 1
  12.                                             F7-3 = 0
  13.                                             F7-4 = 1
  14.         
  15.         采用实际选项录入设置为 F7 = 1,2,4

  16. 这种录入方式需要在后期数据清理时进行拆分,拆分为哑变量形式,以下是如何拆分多选题的代码
  17. 可以比较拆分后的哑变量与原来变量的结果

  18. Date: 2018-08-06
  19. Author: YPP JY
  20. ***********************************************/
  21. use sample.dta,clear
  22. local j n v
  23. foreach v of varlist F7 F25 F101 F112 F113 F115 F118 F120 F121 F326 { // 用 of varlist
  24.     local temp=0                                                                                                           // 用于计算依据不同选项生成的变量数量
  25.         local oplist 1 2 3 4 5 6 7 8 9 10 88 99                           // 初始化oplist
  26.         
  27.         split `v',p(,) gen("new_`v'_")
  28.         local nv=`r(nvars)'
  29.         di as error "the number of splitted variable in `v':" `nv'        // 逗号分隔生成的变量数量

  30.         if "`v'"=="F25" {                                                 // ==左右两边双引号,以下为不同题目的不同选项
  31.                 local oplist 1 2 3 4 5 6 7 8 9 88
  32.         }
  33.         
  34.         if "`v'"=="F101" {
  35.                 local oplist 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 66 77 88 99
  36.         }
  37.                         
  38.         if "`v'"=="F112" | "`v'"=="F113"  {
  39.                 local oplist 1 2 3 4 5 6 88 99
  40.         }
  41.         
  42.         if "`v'"=="F115" | "`v'"==F121 {
  43.                 local oplist 1 2 3 4 5 6 7 8 9 88 99
  44.         }
  45.         
  46.         if "`v'"=="F118" {
  47.                 local oplist 1 2 3 4 5 6 7 8 88
  48.         }
  49.         
  50.         if "`v'"=="F120" {
  51.                 local oplist 1 2 3 4 5 6 7 8 9 10 11 88 99
  52.         }
  53.         
  54.         if "`v'"=="F326" {
  55.                 local oplist 1 2 3 4 5 6 7 88
  56.         }

  57.         foreach j of local oplist {
  58.                 quietly generate int `v'_`j'=.
  59.                 local temp=`temp'+1
  60.                 forvalue n=1/`nv' {
  61.                         quietly replace `v'_`j'=1 if new_`v'_`n'=="`j'"
  62.                 }
  63.                 order `v'_*,after("`v'")
  64.         }
  65.         di as error "the number of generated variables in `v':"`temp'

  66. }


  67. drop new*
复制代码
sample.dta (1.33 MB)



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Stakiny + 3 + 3 + 3 精彩帖子
txje + 2 + 2 + 2 精彩帖子
游码 + 50 + 3 + 5 + 3 精彩帖子

总评分: 论坛币 + 50  学术水平 + 8  热心指数 + 10  信用等级 + 8   查看全部评分

沙发
游码 在职认证  企业认证  发表于 2018-10-24 13:42:46
感觉很棒

藤椅
fzy5520227 在职认证  发表于 2019-1-18 08:54:10
thank you for sharing.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-31 11:25