2017-06-14 152 views
0

我正在嘗試爲一個相當大的數據集(3m個觀察值)編寫代碼,該數據集已被分成更小的組(ID)。對於每個觀察結果(如下表所示),我想爲排在我以下的所有觀測值創建一個變量「值」的累計和,但要根據排名較低的觀測值等於我的條件。Stata代碼有條件地總結基於組別的數值

[Data[2]

我想寫這個代碼不使用循環,如果有一種方法可以做到這一點。 有人可以幫我嗎?

謝謝!

更新: 我粘貼了以下輸出變量的等式。

更新2: 上表中的CSV格式爲:

ID,Rank,Condition,Value,Expected output,, 
1,1,30,10,0,, 
1,2,40,20,0,, 
1,3,20,30,0,, 
1,4,30,40,10,, 
1,5,40,50,20,, 
1,6,20,60,30,, 
1,7,30,70,80,, 
2,1,40,80,0,, 
2,2,20,90,0,, 
2,3,30,100,0,, 
2,4,40,110,80,, 
2,5,20,120,90,, 
2,6,30,130,100,, 
2,7,40,140,190,, 
2,8,20,150,210,, 
2,9,30,160,230,, 

Equation

+0

我完全不能效仿這個例子。指導我們如何通過(例如)0,0,10,20,30,80如何遵循您的ID爲1的規則。 –

+0

謝謝尼克!我用等式更新了這個問題。 – SreeVathsan

回答

1

如果我理解正確的話,對於ID和條件的每種組合,要計算運行按Rank排序的變量Value的總和,不包括當前的觀察值。如果這確實是你的目標,下面的未經測試的代碼可能會在道路上設置你的解決方案

sort ID Condition Rank 
// be sure there is a single observation for each combination 
isid ID Condition Rank 
// generate the running sum 
by ID Condition (Rank): generate output = sum(Value) 
// subtract out the current observation 
replace output = output - Value 
// return to the original order 
sort ID Rank 

正如我所說的,這是未經測試,因爲我的Stata的副本不能讀取數據的畫面。如果您的測試顯示它不完善,並且您無法自己解決問題,那麼以可用格式提供樣本數據將增加某人能夠提供幫助的可能性。

新增於編輯:更正了isid命令。

+0

謝謝威廉!這是我在不必處理條件變量時所使用的解決方案。我已經把問題的公式和csv文本與示例數據 – SreeVathsan

+0

並且當您運行我的解決方案,如上所述,您發佈的示例數據,您會達到什麼結果? (請注意,我編輯了您的帖子,將數據格式化爲代碼形式,而不是重新排列成一行。)您能否解釋如何將80而不是50作爲ID 1等級7的預期輸出? – 2017-06-15 15:11:30

+0

優秀的診斷:問題的核心是'bysort ID條件(等級):生成輸出=總和(價值) - 價值' –