删除Stata

时间:2016-05-19 20:39:53

标签: stata

我认为我的问题与此类似:Drop observations in panel data using Stata 但我仍然做错了什么,它对我来说并不适合。

我的面板数据包含以下变量: Year - Month - Subject - Trial - Attempt - Reward

每个受试者有4次试验(或轮次),每轮5次尝试。奖励通过尝试和回合而变化,第5次(最后)尝试总是= 2.对于每个受试者,随机选择4个试验中的一个以使所有5次尝试具有reward = 2(通常尝试1-4具有reward = 1 {1}})。我需要删除那些"奖励试验"。

我知道我需要使用byhttp://www.stata.com/manuals13/dby.pdf),但我似乎做错了。如果我这样做:

by trial: drop if attempt == 2 & reward == 2

然后我得到

  

没有排序。

如果我这样做:

by trial, sort: drop if attempt == 2 & reward == 2
当我需要它放弃该试验中的所有5个观察结果时,它会丢掉1个观察结果。

数据示例:

* Example generated by -dataex-. To install: ssc install dataex
clear
input int Year str3 Month byte(Subject Trial Attempt Reward) str1 Todrop
2016 "Feb" 1 1 1 1 "" 
2016 "Feb" 1 1 2 1 "" 
2016 "Feb" 1 1 3 1 "" 
2016 "Feb" 1 1 4 1 "" 
2016 "Feb" 1 1 5 2 "" 
2016 "Feb" 1 2 1 1 "" 
2016 "Feb" 1 2 2 1 "" 
2016 "Feb" 1 2 3 1 "" 
2016 "Feb" 1 2 4 1 "" 
2016 "Feb" 1 2 5 2 "" 
2016 "Feb" 1 3 1 2 "*"
2016 "Feb" 1 3 2 2 "*"
2016 "Feb" 1 3 3 2 "*"
2016 "Feb" 1 3 4 2 "*"
2016 "Feb" 1 3 5 2 "*"
2016 "Feb" 2 1 1 1 "" 
2016 "Feb" 2 1 2 1 "" 
2016 "Feb" 2 1 3 1 "" 
2016 "Feb" 2 1 4 1 "" 
2016 "Feb" 2 1 5 2 "" 
2016 "Feb" 2 2 1 2 "*"
2016 "Feb" 2 2 2 2 "*"
2016 "Feb" 2 2 3 2 "*"
2016 "Feb" 2 2 4 2 "*"
2016 "Feb" 2 2 5 2 "*"
2016 "Feb" 2 3 1 1 "" 
2016 "Feb" 2 3 2 1 "" 
2016 "Feb" 2 3 3 1 "" 
2016 "Feb" 2 3 4 1 "" 
2016 "Feb" 2 3 5 2 "" 
end

以上是两个科目的例子。我希望能够做的是放弃对象1的所有试验3,对于对象2(已加星标的试验)的所有试验2,但不放弃其他试验(非星级试验)。也就是说,变量Todrop*,观察结果为drop ped,否则为空。

2 个答案:

答案 0 :(得分:1)

假设您的示例中已读入数据,您可以通过

确定drop的观察结果
 bysort Year Month Subject Trial (Reward) : gen todrop = Reward[1] == 2 & Reward[5] == 2

原则是:

  1. 通过变量的交叉组合定义组。如你所说,by:在这里提供了一个框架。

  2. Reward的每个值必须为2组,才能drop ped。如果是这样,那么在sortReward之后,第一个和最后一个值都是2是必要且充分的。

  3. 当且仅当todropTodrop时,请确认上面定义的*为1。 (例如,查看tabulate *drop, missing)。

    一旦满意,

    drop if todrop 
    

    更多this Stata FAQ

答案 1 :(得分:0)

gen flag_temp=1 if attempt == 2 & reward == 2
bysort trial: egen flag=min(flag_temp)

drop if flag==1

<强>动臂