STATA 手工输入数据 inlist encode快速建立值标签
use cfps2014adult_201906, clear label list brow if fid10==-8 // inlist(z,a,b,.….)语法描述:当z满足a,b,….中的任何一个,则返回值为1,否则为0。所有参数必须是实数或者字符型数据, // 其中数值型参数的个数需要在2~250之间,字符型需要在2~10个字符;适用范围:所有实数或者字符串;返回值:0或1。字符串类型的参数需要用引号""括起来; //将所有变量值为-10 -9 -8 -2 -1都修改为.(缺失值) for var _all: replace X =. if inlist(X, -10, -9, -8, -2, -1) gen bz=0 for var _all: replace X=1 if inlist(X,-8) order bz,first list if fid10==-8 & countyid14==-8 clear input str10 prov 天津 北京 上海 广东 福建 山西 陕西 宁夏 河南 河北 山东 新疆 黑龙江 end save 0310a,replace //∥保存数据,以备后用 // 然后,生成"东部"虚拟变量。其中,东部包括:北京、天津、河北、辽宁、上海、江苏、浙江、福建、山东、广东、广西、海南12个省、自治区、直辖市。 gen East = 0 //用双引号限制字符型 replace East=1 if prov=="北京"|prov=="上海"|prov=="广东" |prov=="福建"|prov=="山东" | prov=="天津" replace East=0 // 或将上述两句合并为一句命令。 gen East2=(prov=="天津"|prov=="北京"|prov=="上海"|prov=="广东"|prov=="福建"|prov=="山东") // 若使用inlist命令,语法会简化很多。需要注意的是,inlist后面要直接加(,不可加空格,否则会报错。同时,每个字符串都需要用引号括起来。 gen East3=inlist(prov,"天津","北京","上海","广东","福建","山东") // 但这种定义方法有个很大的限制,即枚举的省份个数不能超过十个。一个变通的方法是,生成一个数值变量,用以标记省份名称,进而把每个省份的数字编码放到inlist()函数的列表中。之所以如此,主要是因为inlist()函数最多可以接受250个数字类型的列表元素。具体做法如下: //encode 快速新增变量,并建立以变量名为名的值标签,其值是根据prov字符转为对应数值编码 . encode prov, gen (provNum) label (provNum) label list provNumprovNum: 1上海 2北京 3天津 4宁夏 5山东 6山西 7广东 8新疆 9河北 10河南 11福建 12陕西 13黑龙江 // 在这里,我们使用encode命令产生了prov变量的[数字-文字对应表],并将其数值编码存储在新变量provNum中。 此时,可以使用如下命令定义虚拟变量East4: gen East4 = inlist (provNum, 1,2,3,5,7,11)上述功能也可以使用