Stata:Newvar的多个相同日期

时间:2014-12-11 17:37:33

标签: stata

我很难生成一个新变量,该变量将在每个月创建,每个月都有多个条目。

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]

之后我每隔一个月收到一个值,但我不确定这是否正确,这就是为什么我希望有人看看这个可以确认是否应该是正确的。问题在于,如果数字正确,有很多值很难手动控制它。希望清楚我想做什么。

2 个答案:

答案 0 :(得分:2)

对您的代码提出两条评论

  1. 有一个拼写错误:date[[_n-1]应为date1[_n-1]
  2. 在您发布的代码中,不需要gen n = _n
  3. 可能有以下几点:

    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 sortmonth不能唯一地识别观察的方式,每次运行的累积和的系列可能会有所不同。也就是说,最后一次观察将始终是相同的,但是你到达总和的方式,通过观察观察,不会是。如果您想要总计,请使用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函数可以在很多地方使用,但最常见的用途是调用generatedisplay(即使在egen调用中也可以找到示例)。

对不同的东西使用相同的名称无疑是混乱的根源。在Stata 9中,egen函数名sum()没有记录,有利于total(),但是人们猜测错误或者没有仔细研究文档仍然存在困难。