Stata中inlist函数可以快速实现多个或(|)判断,但缺点是括号内的参数有数量限制,字符串是2-10个,数值是2-250个。
inlist(z,a,b,…)
Description: 1 if z is a member of the remaining arguments; otherwise, 0.All arguments must be reals or all must be strings. The number of arguments is between 2 and 250 for reals and between 2 and 10 for strings.
Domain: all reals or all strings
Range: 0 or 1
10个以上字符串是在日常工作是很常见的,为了突破这一限制,苏黎世联邦理工学院的Matteo Pinna开发了inlist增强版–Stata社区命令inlist2。
安装社区命令inlist2:
ssc install inlist2, clear
载入演示数据:
. sysuse auto, clear (1978 Automobile Data)
是我们要基于make生成一个变量,如果make是以下11个值之一(AMC Concord,AMC Pacer,AMC Spirit,Audi 5000,Audi Fox,BMW 320i,Buick Century,Buick Electra,Buick LeSabre,Buick Opel,Buick Regal ),则生成一个新变量Lian11,并赋值为1;若make的值不属于上述11个值,则为新变量赋值为缺失值(.)。
. inlist2 make, values(AMC Concord,AMC Pacer,AMC Spirit,Audi 5000,Audi Fox,BMW 320i,Buick Century,Buick Electra,Buick LeSabre,Buick Opel,Buick Regal) name(Lian11) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made) (1 real change made)
查看注意:1)inlist2生成的值为1和.,系统函数inlist生成的值为1和0;2)name选项如果不选的话,默认生成的变量名是inlist2。
. sum price if Lian11==1 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- price | 11 6040 2132.947 3799 9735 . fre Lian11 Lian11 ------------------------------------------------------- | Freq. Percent Valid Cum. ----------+-------------------------------------------- Valid 1 | 11 14.86 100.00 100.00 Missing . | 63 85.14 Total | 74 100.00 ------------------------------------------------------- . tab Lian11,m Lian11 | Freq. Percent Cum. ------------+----------------------------------- 1 | 11 14.86 14.86 . | 63 85.14 100.00 ------------+----------------------------------- Total | 74 100.00
最后,数值和字母类似。
. inlist2 rep78, values(1,2,3) name(Lian123) (2 real changes made) (8 real changes made) (30 real changes made) . sum price if Lian123==1 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- price | 40 6243.675 3425.43 3291 15906 //等价于下面的命令 . sum price if rep78<=3 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- price | 40 6243.675 3425.43 3291 15906
如果参数数量不超标,使用系统函数更为优雅快捷:
. sum price if inlist(rep78,1,2,3) Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- price | 40 6243.675 3425.43 3291 15906
命令说明:
最低版本:Stata version 12.1
发布日期:2021年03月11日
程序作者:Matteo Pinna
联系邮箱:[email protected]