Where, Having and OR clauses



期待您的帮助!我有一套批准的、拒绝的、未完成的等交易。我需要获得最新的交易(由于交易重复;他们只是在批准/拒绝/等状态上有所不同),但如果我们需要保持所有批准(一个事务可以被批准两次,我们需要看到它)。任务:我需要保留所有"已批准"的文件。事务,然后是最新的(来自其他结果)。并非所有的交易都有批准状态。一个事务可以有2个Approvals,而其他事务可以有Decline和Decline(在这种情况下,我需要最近的Decline)。

这是不工作:

proc sql;
create table XYZ as 
select * 
from MKZ
where approve_decline='Approve'
group by Trans_id_proxy 
or (having datetimevar=max(datetimevar)) 
order by account_number
;
quit;

谢谢!

如果您在SAS中,那么这不是proc sql的任务,而是数据步骤的任务。PROC SQL在这种逐行考虑方面不是很好,特别是在顺序方面——在SQL中可以做到,但要复杂得多。

关于你做错了什么-首先,你实际上不想要group by,那将折叠行;您希望选择单独的行。Having也不是你可以嵌入其他东西-wherehaving是分开的,where在组by之前(因此,过滤输入记录),having在组by之后(过滤输出记录)。

在数据步骤中,这非常快。

proc sort data=mkz out=mkz_sort;
by account_number trans_id_proxy datetimevar;
run;
data xyz;
set mkz_sort;
by account_number trans_id_proxy;
if (last.trans_id_proxy) or (approve_decline='Approve');
run;

我不确定我是否有by正确,因为不清楚你打算如何分组这些,但我假设account_number是分组的主要内容,trans_id_proxy是次要的-你在SQL中不这样做,所以也许你的意思是别的。只要让bydatetimevar在最后,在它之前的任何变量(s)你想操作作为分组。

相关内容

  • 没有找到相关文章

最新更新