levelsof
我怀疑您使用with生成的宏的困难inlist
在于您忘记使用该separate(,)
选项。我也不相信你可以使用这个inlist
函数keep if
——你需要添加额外的步骤来定义一个新的指标。
在下面的示例中,我使用了 1978 年的汽车数据并创建了一个make_abb
汽车制造商(或制造商)变量,该变量仅采用少数不同的值(道奇的“Do”等)。
然后,我使用该levelsof
命令生成制造商的本地宏,该宏的制造商具有维修记录不佳的车型(该变量rep78
是分类维修记录变量,其中 1 为不良,5 为良好)。该选项separate(,)
是将逗号添加到宏中并允许 inlist 稍后读取它。
最后,如果我想删除没有不良维修记录的制造商,我会生成一个名为“keep_me”的虚拟变量并使用 inlist 函数填充它。
*load some data
sysuse auto
*create some make categories by splitting the make and model string
gen make_abb=substr(make,1,2)
lab var make_abb "make abbreviation (string)"
*use levelsof with "local(macro_name)" and "separate(,)" options
levelsof make_abb if rep78<=2, separate(,) local(make_poor)
*generate a dummy using inlist and your levelsof macro from above
gen keep_me=1 if inlist(make_abb,`make_poor')
lab var keep_me "dummy of makes that had a bad repair record"
*now you can discard the rest of your data
keep if keep_me==1