期待您的帮助!我有一套批准的、拒绝的、未完成的等交易。我需要获得最新的交易(由于交易重复;他们只是在批准/拒绝/等状态上有所不同),但如果我们需要保持所有批准(一个事务可以被批准两次,我们需要看到它)。任务:我需要保留所有"已批准"的文件。事务,然后是最新的(来自其他结果)。并非所有的交易都有批准状态。一个事务可以有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
也不是你可以嵌入其他东西-where
和having
是分开的,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中不这样做,所以也许你的意思是别的。只要让by
有datetimevar
在最后,在它之前的任何变量(s)你想操作作为分组。