SQL 按命令分组

SQL group by command

我有一个 table,其中主要 ID 是 permno(公司标识符)。 table 还包含那一年的 每周 returns。最后,它有一个名为 'rret' 的列,当每周 return 大于平均每年 return(上周)时为 1,否则为 0(下周)。

我想计算给定年份一家公司每周 return 的上周和下周的标准差,然后计算两者之间的比率。到目前为止,我刚刚使用以下代码计算了 每周 return 的标准偏差(对于上周和下周):

proc sql; 
create table crash.duvol5 as 
select permno, fyear, rret, std(weekly_ret) as stdret 
from crash.duvol4
group by permno, fyear, rret
;
quit; 

基本上,我想在另一个专栏中:

我不知道如何用 SQL 计算它。任何帮助将不胜感激。提前致谢。

除法工作正常,但您需要使用 LAG() 将值获取到另一行。

data want;
    set have;
    by permno fyear;
    prev = lag(stdret);
    if last.fyear then ratio = stdret/prev;
run;

未测试 - 请 post 将数据作为文本,以便于测试和回答您的问题。我必须从图像中输入数据,我太懒了。

考虑条件聚合:

proc sql; 
   CREATE TABLE crash.duvol5 AS
   SELECT permno, fyear, 
          std(weekly_ret) AS stdret,
          std(CASE WHEN rret = 1 THEN weekly_ret ELSE . END) /
          std(CASE WHEN rret = 0 THEN weekly_ret ELSE . END) AS stdret_ratio 
   FROM crash.duvol4
   GROUP BY permno, fyear;
quit;