符合条件语句的所有组的计数

时间:2018-08-17 20:24:36

标签: stata survey

这个周末,我在创建符合SO准则的帖子时想出了一个解决方案。很抱歉在第一篇文章中没有给您任何帮助。

我的解决方案是将我感兴趣的数据折叠成一个计数数据集,然后对满足条件表达式的那些组进行制表符:

示例:

说我想按种族和性别分析年龄组中的政党归属。在进一步了解之前,我想确保我具有进行适当分析所需的细胞计数。我想检查每个种族有多少种族至少有10个政党观察,以及按性别划分的多少年龄组至少有10个政党观察。而且我太懒了,无法从一个简单的选项卡中计算出满足此条件的组的数量,因此我希望Stata为我做这件事(这对于包含许多分组(例如县或邮政编码)的大型调查数据必不可少)。

使用U of Wisconsin stats sitehttps://www.ssc.wisc.edu/sscc/pubs/sfs/sfs-files.htm)上可用的2014年一般社会调查数据集的子集

use https://www.ssc.wisc.edu/sscc/pubs/sfs/gss_sample.dta

* Streamline dataset
keep sex age race partyid 

*Create age group variable
gen agegroup = .
replace agegroup=1 if age<=25
replace agegroup=2 if age>25 & age <=35
replace agegroup=3 if age>35 & age<=45
replace agegroup=4 if age>45 & age <=55
replace agegroup=5 if age>55 & age <=65
replace agegroup=6 if age>65
label var agegroup "Age Groups"
lab def grouplab 1 "25 or younger" 2 "26 to 35" 3 "36 to 45" 4 "46 to 55" 5 "56 to 65" 6 "65 and older"
lab val agegroup grouplab


collapse (count) numparty=partyid, by(agegroup race)
list
tab agegroup race if numparty>10

*唯一对政党做出至少10次回应的黑人受访者年龄在26至35岁之间;所有白人年龄段的人对派对ID的反应至少为10

clear
use https://www.ssc.wisc.edu/sscc/pubs/sfs/gss_sample.dta

* Streamline dataset
keep sex age race partyid 

*Create age group variable
gen agegroup = .
replace agegroup=1 if age<=25
replace agegroup=2 if age>25 & age <=35
replace agegroup=3 if age>35 & age<=45
replace agegroup=4 if age>45 & age <=55
replace agegroup=5 if age>55 & age <=65
replace agegroup=6 if age>65
label var agegroup "Age Groups"
lab def grouplab 1 "25 or younger" 2 "26 to 35" 3 "36 to 45" 4 "46 to 55" 5 "56 to 65" 6 "65 and older"
lab val agegroup grouplab


collapse (count) numparty=partyid, by(agegroup sex)
list
tab agegroup sex if numparty>10

* 5/6个年龄段的男性对派对ID的反应超过10个,而6/6个年龄段的女性对派对ID的反应超过10个

这些示例有点荒谬,但是结构是我想出的并且可以处理我的真实数据。请给我您的反馈。我知道这对于大多数人来说可能是显而易见的,并且可能会有一个更为优雅的解决方案。

原始帖子:


我是R的Stata新手,无法解决看似简单的问题。在处理调查数据时,我需要知道我的调查每年有多少组有50多个观测值。我不在乎观察结果的价值,仅在乎它们是否回答了问题(无缺失)。理想的输出将是一个数字(即,如果总共35个组中的33个满足条件,则为“ 33”)。我已经尝试过计算和和以及各种“ by”语句。

我希望这样的事情,在第一年有33个小组的肥胖指数超过50,在第二年有20个小组的肥胖指数超过50,而在第3年有29个小组的肥胖指数超过50。

|一年级|第二年|第三年|     33 20 29

弄清楚如何做后,我会发布一些虚假的较小数据。

1 个答案:

答案 0 :(得分:-1)

不规则分类最好完全明确地进行。这是一种实现方法:虽然不是特别简洁,但是它应该具有相当的指导意义并且易于遵循。

* toy dataset for any one who wants to play 
clear
input age 
15
25
35
45
55
65
75 
end 

* OP's method 
gen agegroup = .
replace agegroup=1 if age<=25
replace agegroup=2 if age>25 & age <=35
replace agegroup=3 if age>35 & age<=45
replace agegroup=4 if age>45 & age <=55
replace agegroup=5 if age>55 & age <=65
replace agegroup=6 if age>65

* another way to do it 
gen also = 6 
local limits 65 55 45 35 25 
quietly forval j = 5(-1)1 { 
    gettoken this limits : limits 
    replace also = `j' if age <= `this' 
} 

* compare results
list