2016-07-15 88 views
-1

我期望爲重複成績,跳過成績或者有不同尋常成績進展(例如2008年4年級和2009年7年級)的學生創建標誌。我的數據在學生證歲的學科水平和獨特的結構是這樣的(儘管有多個變量):使用索引創建標誌

id year subject tested_grade  
1  2011  m   10    
1  2012  m   11     
1  2013  m   12 
2  2011  r   4 
2  2012  r   7 
2  2013  r   8 
3  2011  m   6 
3  2013  m   8 

這是我使用的代碼:

sort id year grade 
gen repeat_flag = . 
    replace repeat_flag = 1 if year!=year[_n+1] & grade==grade[_n+1] /// 
     & subject!=subject[_n+1] & id==id[_n+1] 
    replace repeat_flag = 0 if repeat_flag==. 

的一個問題是有很多學生參加了六年級的考試,七年級沒有參加一次考試,然後參加了八年級的考試。由於某些學區在不同年級採用不同年級的考試,因此這在不同年級和學區之間有所不同。我的代碼沒有解釋這一點。

儘管我認爲必須有更優雅的方法來做到這一點,並作爲一個附註,我想知道索引的使用是否適合於這樣的問題。謝謝!

編輯 包括我的數據看起來像上面迴應下面的評論之一的示例。如果仍然不清楚歡迎任何反饋。

+0

爲什麼投下了票?請給出一個理由,以便我可以進行更改以改善問題。 – otteheng

+2

沒有被我低估,但我很難想象你的數據結構如何 - 讀者對你寫的內容的想象性解釋太多了 - 所以我不會冒你的問題的答案。要對downvote做出響應,您可以考慮查看幫助中心提出的問題中的信息,特別是http://stackoverflow.com/help/mcve – 2016-07-15 20:17:45

+0

@WilliamLisowski感謝您的反饋。我會看看我能否以一種更清晰的方式重組問題。 – otteheng

回答

1

看起來很不尋常的是,在測試成績中,學生的進步速度要快於或慢於時間推移。這可能只是一個咕嚕工作的線:

clear 
input id year str1 subject tested_grade  
1  2011  m   10    
1  2012  m   11     
1  2013  m   12 
2  2011  r   4 
2  2012  r   7 
2  2013  r   8 
3  2011  m   6 
3  2013  m   8 
end 
bysort id (year) : gen flag = (tested - tested[_n-1]) - (year - year[_n-1]) 
list if flag != 0 & flag < . , sepby(id) 

    +---------------------------------------+ 
    | id year subject tested~e flag | 
    |---------------------------------------| 
    5. | 2 2012   r   7  2 | 
    +---------------------------------------+