*只保留"先1后0"的相邻两个观测值
keep if (x&!x[_n+1])|(!x&x[_n-1]&(x[_n-1]<.))
*附:设x是数值型变量
if x
等价于
if x!=0
if !x
等价于
if x==0
Stata可以把普通的数值型变量理解为逻辑型变量(该型变量有且只有两值:“真”与“假”):将非零值理解为“真”,将零值理解为“假”;同时把逻辑型变量理解为特定的数值型变量(即0-1变量:"1"代表"真","0"代表"假")。于是,在表达逻辑值意义上,一个数值型变量唯一对应一个0-1变量(非零值对应1,零值对应0)。Stata处理逻辑型变量本质上只是处理0-1变量。
对于某观测值,if后面的表达式若成立(或“真”),则Stata将该表达式整体理解为1,且对该观测值执行操作,否则Stata将该表达式整体理解为0,且不对该观测值执行操作。特别地,若if后面的表达式只是某个数值型变量(特例是,只是某个0-1变量),则Stata直接根据该变量各取值所对应的逻辑值意义执行操作。