我试图在给定子集数据的情况下拉回所有MAX实例.... first.id或last.id不起作用,因为我想保留同一事务的多行。例如:
在这个例子中,我希望突出显示的行作为输出。我的数据有几个FORM,QUARTER和CUST_ID我想根据FORM,QUARTER,CUST_ID
以编程方式将SAS拉回最新版本Last.DB_ID只返回1行。我需要相同DB_ID的所有行。
这也没有做任何事情:
data work.want;
set work.have;
by FORM Quarter Cust_ID DB_ID ;
if Max(DB_ID) then output;
run;
答案 0 :(得分:0)
您需要对数据进行两次传递:一次确定该ID的最大值,另一次查找具有该最大值的行。
在数据步骤中执行此操作需要DoW循环,该循环每个cust_id值运行一次数据步骤迭代,但两次遍历数据集。
data want;
do _n_ = 1 by 1 until (last.cust_id);
set have;
by form quarter cust_id;
if last.cust_id then max_db_value=db_id;
end;
do _n_ = 1 by 1 until (last.cust_id);
set have;
by form quarter cust_id;
if db_id = max_db_Value then output;
end;
run;
如果DB_ID按照您的示例中的顺序进行排序,则可以正常工作。如果它没有排序,您可以将当前存储的max_db_value与当前db_id进行比较,如果它更高,则将db_id中的新值分配给它,如
max_db_value = max(db_id, max_db_value);
而不是在last.cust_id
为真时指定它。