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;
我有一个 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;