Sql 做join和join的奇怪行为 创建表umd2 选择a.permno、a.date、a.realdate、exp(sum(log(1+b.ret))-1作为cum_返回 从msex2(obs=50 keep=permno date realdate)作为a,msex2(obs=50 keep=permno date ret)作为b 其中a.permno=b.permno和0

Sql 做join和join的奇怪行为 创建表umd2 选择a.permno、a.date、a.realdate、exp(sum(log(1+b.ret))-1作为cum_返回 从msex2(obs=50 keep=permno date realdate)作为a,msex2(obs=50 keep=permno date ret)作为b 其中a.permno=b.permno和0,sql,sas,Sql,Sas,这是SAS的行为方式。SAS识别以下查询: create table umd2 as select a.permno, a.date, a.realdate, exp(sum(log(1+b.ret))) - 1 as cum_return from msex2 (obs=50 keep=permno date realdate) as a, msex2 (obs=50 keep=permno date ret) as b where a.permno=b.per

这是SAS的行为方式。SAS识别以下查询:

    create table umd2
    as select a.permno, a.date, a.realdate, exp(sum(log(1+b.ret))) - 1 as cum_return
    from msex2 (obs=50 keep=permno date realdate) as a, msex2 (obs=50 keep=permno date ret) as b
    where a.permno=b.permno and 0<=intck('month', b.date, a.date)<3
    group by a.permno, a.date, a.realdate
    having count(b.ret)=3;
您现在使用的是非标准SQL。大多数数据库都会生成错误。MySQL将接受这种语法,并从匹配的值中为
a.read\u date
分配一个任意值。SAS做了一些不同的事情。SAS说:“很明显,您不希望这是一个聚合查询。”因此,它不聚合行,而是将聚合值附加到每一行。在其他数据库中,可以使用窗口函数执行此操作


从技术上讲,SAS将此重新合并摘要数据称为文档数据。

这是SAS的行为方式。SAS识别以下查询:

    create table umd2
    as select a.permno, a.date, a.realdate, exp(sum(log(1+b.ret))) - 1 as cum_return
    from msex2 (obs=50 keep=permno date realdate) as a, msex2 (obs=50 keep=permno date ret) as b
    where a.permno=b.permno and 0<=intck('month', b.date, a.date)<3
    group by a.permno, a.date, a.realdate
    having count(b.ret)=3;
您现在使用的是非标准SQL。大多数数据库都会生成错误。MySQL将接受这种语法,并从匹配的值中为
a.read\u date
分配一个任意值。SAS做了一些不同的事情。SAS说:“很明显,您不希望这是一个聚合查询。”因此,它不聚合行,而是将聚合值附加到每一行。在其他数据库中,可以使用窗口函数执行此操作


从技术上讲,SAS将此重新合并汇总数据称为文档化数据。

非常清楚的解释。我从来没有注意到我在做一些不规范的事情。非常清楚的解释。我从来没有注意到我在做一些不规范的事情。
select a.permno, a.date, a.realdate, count(*)
from <whatever>
group by a.permno, a.date, a.realdate;
select a.permno, a.date, a.realdate, count(*)
from <whatever>
group by a.permno, a.date;