我很难生成一个新变量,该变量将在每个月创建,每个月都有多个条目。
date1 x b
1925m12 .01213 .323
1925m12 .94323 .343
1926m01 .34343 .342
代码看起来像gen newvar = sum(x*b)
,但我想为每个月创建变量。
到目前为止我尝试的是
使用
创建date1变量的索引sort date1
gen n=_n
然后在日期更改时创建二进制标记
与
gen byte new=date1!=date[[_n-1]
之后我每隔一个月收到一个值,但我不确定这是否正确,这就是为什么我希望有人看看这个可以确认是否应该是正确的。问题在于,如果数字正确,有很多值很难手动控制它。希望清楚我想做什么。
答案 0 :(得分:2)
对您的代码提出两条评论
date[[_n-1]
应为date1[_n-1]
gen n = _n
。可能有以下几点:
clear
set more off
*-----example data -----
input ///
str10 date1 x b
1925m12 .01213 .323
1925m12 .94323 .343
1926m01 .34343 .342
end
gen date2 = monthly(date1, "YM")
format %tm date2
*----- what you want -----
gen month = month(dofm(date2))
bysort month: gen newvar = sum(x*b)
list, sepby(month)
会有所帮助。
但是,请注意,由于Stata sort
和month
不能唯一地识别观察的方式,每次运行的累积和的系列可能会有所不同。也就是说,最后一次观察将始终是相同的,但是你到达总和的方式,通过观察观察,不会是。如果您想要总计,请使用egen, total()
代替sum()
。
如果您想按月/年分组,则需要:bysort date2: ...
这里的关键是by:
前缀。例如,请参阅Nick Cox的Speaking Stata: How to move step by: step,当然还有help by
。
答案 1 :(得分:2)
在这个线程中触及了一个重大错误,它应该得到自己的答案。
与generate
一起使用时,函数sum()
会返回累计或运行总和。
与egen
一起使用时,函数名称sum()
是egen
函数total()
的过时但仍然合法且有效的名称。
单词"功能"即使在Stata内,这里也超载了。 egen
函数是egen
下记录的函数,不能在任何其他命令或上下文中使用。相比之下,Stata函数可以在很多地方使用,但最常见的用途是调用generate
或display
(即使在egen
调用中也可以找到示例)。
对不同的东西使用相同的名称无疑是混乱的根源。在Stata 9中,egen
函数名sum()
没有记录,有利于total()
,但是人们猜测错误或者没有仔细研究文档仍然存在困难。