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)上述功能也可以使用

 

posted @ 2023-03-10 06:02  myrj  阅读(276)  评论(0编辑  收藏  举报