我有一個公司的列表開始和結束日期爲每個。我想統計一段時間以來存活的公司數量。我有以下代碼,但它在我的大型數據集上運行緩慢。在Stata中有更有效的方法嗎?高效率地計算生存公司數
forvalues y = 1982/2012 {
forvalues m = 1/12 {
*display date("01-`m'-`y'","DMY")
count if start_dt <= date("01-`m'-`y'","DMY") & date("01-`m'-`y'","DMY") <= end_dt
}
}
請注意,這樣每個不同的日期只被評估一次。對於原始代碼,每次觀察都要進行兩次評估。 –
@NickCox我知道Stata函數(不包括'egen'函數)不是開源的,但是你可以說'inrange'正在做什麼?我傾向於認爲它也做了雙重評估,但是編譯** C **語言使其更快。這是正確的嗎? –
我不是暗指'inrange()',而是執行'date()'評估。 'inrange()'評估必須爲每個觀察分開進行。正如你所說,我無法評論Stata的內部C代碼是如何編碼的,但可能是對C代碼的調用。 –