SQL group by命令

SQL group by命令,sql,group-by,sas,proc-sql,Sql,Group By,Sas,Proc Sql,我有一个表,其中主id是permno公司标识符。该表还包含当年和当年的每周回报。最后,它有一个名为“rret”的列,当周回报率大于周上平均年回报率时,该列为1,否则为周下平均年回报率0 我想计算一家公司在给定年份的每周收益率上周和下周的标准差,然后计算两者之间的比率。到目前为止,我刚刚使用以下代码计算了每周收益率的标准差(upweek和downweek): proc sql; create table crash.duvol5 as select permno, fyear, rret, s

我有一个表,其中主id是permno公司标识符。该表还包含当年和当年的每周回报。最后,它有一个名为“rret”的列,当周回报率大于周上平均年回报率时,该列为1,否则为周下平均年回报率0

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

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;

未测试-请将数据以文本形式发布,以便于测试和回答您的问题。我必须从图像中键入数据,我太懒了。

考虑条件聚合:

proc-sql; 将表crash.duvol5创建为 选择permno、fyear、, 严格按照标准执行, 当rret=1时,则为stdCASE,然后为weekly\u ret ELSE。结束/ 当rret=0时,则为stdCASE,然后为weekly\u ret ELSE。以标准比率结束 来自crash.duvol4 permno分组,fyear; 退出
因此,您正在寻找从crash.duvol4中选择stdweekly_-ret作为stdret,其中rret=1按permno,fyear,rret分组/从crash.duvol4中选择stdweekly_-ret作为stdret,其中rret=0按permno,fyear,rret分组?用例语句hi,Zynon-Putney II,是的。我在找。事实上,我试着执行你的命令。每一部分都很好。但是分区/不起作用。非常感谢。这正是我想要的。非常感谢。