我懷疑你在使用levelsof
與inlist
產生宏困難是,你忘了使用separate(,)
選項。我也不相信你可以使用inlist
功能與keep if
- 你需要添加額外的步驟來定義一個新的指標。
在下面的示例中,我使用了1978年的自動數據,並創建了一個車輛製造商(或製造商)的變量make_abb
,該變量只取得少數幾個不同的值(道奇等的「做」)。
然後,我使用levelsof
命令生成車輛模型修理記錄較差的製造商的本地宏(變量rep78
是一個分類維修記錄變量,其中1爲差,5爲好)。選項separate(,)
是將逗號添加到宏中並使其能夠在以後讀取它。
最後,如果我想刪除而不是的修理記錄不良,我生成一個名爲「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
你能更具體嗎?你試過了嗎?如果是這樣,它工作嗎?如果不是,你遇到了什麼問題? – goric
雖然常用,但「唯一」(嚴格意義上只出現一次)並不是最好的術語。我建議「獨特」。 –