clear
input input record1 record2 value str8 sdate
1 1 0 2 "1/1/2010"
2 1 0 2 "1/1/2010"
3 1 0 3 "1/3/2010"
4 1 0 3 "1/3/2010"
5 1 0 3 "1/3/2010"
6 0 1 -3 "1/5/2010"
7 0 1 -3 "1/5/2010"
8 1 0 2 "1/5/2010"
9 0 1 1 "1/7/2010"
end
gen date = daily(sdate, "MDY")
format date %td
的我有什么是我的数据每一个人是1
如果他们参与该值的变量recordi
一个MWE。我想为每个人创建一个变量,累积地将该天的价值与前一天的最终价值相加。留下以下输出。Stata的累积和重复记录
input record1 record2 value date record1dailysum record2dailysum
1 1 0 2 1/1/2010 2 .
2 1 0 2 1/1/2010 2 .
3 1 0 3 1/3/2010 5 .
4 1 0 3 1/3/2010 5 .
5 1 0 3 1/3/2010 5 .
6 0 1 -3 1/5/2010 . -3
7 0 1 -3 1/5/2010 . -3
8 1 0 2 1/5/2010 7 .
9 0 1 1 1/7/2010 . -2
我有很多记录,所以我用循环来创建这些值。这就是我试图创建recorddailysumi
qui forval i = 1/2
by date: egen record`i'dailysum = value + value[_n-1] if record`i' == 1
}
最后,我想用一个日期值下移所以record1
为1/3/2010
值将是值现在在1/1/2010
等
它不是压缩数据以根据日期和记录创建唯一记录并合并回来的选项(至少这是最后的手段,因为它是一个庞大而凌乱的数据集)。
除了其他地方的详细解答之外,请注意指令“显式下标(使用_N和_n)”,它通常用于生成,不应该与egen一起使用“例如http://www.stata.com/help.cgi?egen你的语法恰好也是非法的,因为没有指定函数,但下标和'egen'不以任何方式混合。这是因为'egen'通常会临时排序,所以在计算过程中可能不会保持排序顺序。 –