我试图获取所有一系列变量,同时取消最近可能的更新日期(PD_LAST_UPDATE)昨天更新了一些字段,有些字段可能是一年前的,所以我可以&只做PD_LAST_UPDATE =(变量编码到特定时间),如果我做任何设定的时间,我会得到太多的数据。
这是我的代码
(SELECT N1.PD_PROP_NUM, N1.PD_START_DATE, N1.PD_END_DATE, N1.PD_DOW_FREQ,
N1.PD_RATE_PGM, N1.PD_ROOM_POOL, N1.PD_QUOTE_SERIES,
N1.PD_RPGM_SEQ_NUM, N1.PD_LAST_UPDATE
FROM OMP.OMT_PR_SSTRAT_DTL N1
INNER JOIN OMP.OMT_PROP_SSTRAT AS N2 ON (N1.PD_PROP_NUM=N2.PS_PROP_NUM AND
N1.PD_START_DATE=N2.PS_START_DATE AND
N1.PD_DOW_FREQ=N2.PS_DOW_FREQ AND
N1.PD_ROOM_POOL=N2.PS_ROOM_POOL)
WHERE N2.PS_PROP_NUM in (11612) AND **n1.PD_LAST_UPDATE = (MAX)**
);
quit;
特别感兴趣的部分用粗体表示,一旦我能够弄清楚如何选择最大值以便我可以拉下所有的概率,它前面的道具将被废除。提前致谢。
答案 0 :(得分:0)
您有两种方法可以过滤变量的最大值。
一种是按照您想要计算最大值的所有内容进行分组,然后使用having
(这是where
的分组后版本),如下所示:
proc sql;
select origin, make, model
from sashelp.cars
group by origin, make
having mpg_city = max(mpg_city);
quit;
这在SAS中是允许的,但在大多数其他SQL风格中不允许。它是下面其他方法的捷径,主要是它,它只适用于某些特定的数据结构。
更传统的方法是做一个相关的子查询:
proc sql;
select origin, make, model
from sashelp.cars C
where mpg_city = (
select max(mpg_city)
from sashelp.cars R
where C.origin=R.origin
and C.make=R.make
group by make, origin
);
quit;
在这种情况下,我们到达同一个地方,或多或少以同样的方式到达那里 - 无论如何SAS都在后端做到这一点。
对于连接,您可以在连接之前(或在其结果随后连接的子查询中)对数据集执行此子查询或类似操作,或者您可以对连接的结果执行此操作,具体取决于哪个更有效,以及是否需要来自两个表的行来确定最大值。