Stata如何突破inlist函数的数量限制(数值250,字符10)?

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]