问题
使用CGSS2010重复某文章中的定量研究,中需要因变量“区县人均收入”。
如何在CGSS2010中为所有样本生成一个格式一的“所在区县”信息?
CGSS2010中包含区县信息的变量为S42。tab s42 发现,其中填写方式混乱, 在是否包含市级信息,是否包含“市”、“区”、县”等字样、是否包含空格等方面 存在大量不一致,无法采用统一的标记及顺序行提取。
目标
尽量避免缺失值地生成区县变量,内容为不包含地区行政级别的区县名称,一 般是2个字,也可能是1或3个字。
分析过程
使用tab查看当前填写方式形成的所有分类;
规律
1、按照标记可以分为四种类型:①含“市”且含“区/县”,②含“市”不含“区/县”,
③不含“市”但含“区/县”,④不含“市”不含“区/县”四种情况;
2、存在同时包含两个“市”字符的数据,统一认定为县级市,计划保留后一个 市的信息;
3、需要清除的符号有空格和加号“十”;
计划
基本思路
1.清除多余的空格及加号
replace
subinstr()
2.去掉市级信息,只保留县级信息
generate
replace
strpos()
usubstr()
length()
(1)带标记的:从“市”所在的顺位开始提取到最后一个字符
(2)不带标记的:观察构成,寻找其他规律,比如相同字数的值是否可以取倒数几位
3.去除末尾的“市”、“区”、“县”、“左旗”、“县级市” 等字样
4. 2~3之前可以将各记号所在顺位、字符串长度生成为工具变量,方便书写的减省
代码
use "D:\Privacy of Wal\graduate crriculum\stata\about CGSS\CGSS2010-15.dta"
*从s42中提取出区县名(不含区县二字)并存放到新变量
tab s42 //分类统计查看取值及其分布
*统一格式和生成工具值
replace s42=subinstr(s42," ","",.) //去除S42取值中的空格
replace s42=subinstr(s42," ","",.) //去除S42取值中的空格
gen shipos=(strpos(s42,"市")+2)/3 if strpos(s42,"市")!=0 //找到第一个“市”的位置
gen quxianpos=(strpos(s42,"县")+2)/3 if strpos(s42,"县")!=0
replace quxianpos=(strpos(s42,"区")+2)/3 if