我正在尝试按升序对每个组的最小值进行排序。我尝试了几种使用分组和排序的不同组合,但无法正确按组排序。最有效的方法是什么?
我试过这个:
PROC SQL;
CREATE TABLE NEED AS
SELECT DISTINCT *
FROM HAVE
GROUP BY ID,VALUE
ORDER BY VALUE;
QUIT;
使用此输出并认为它会根据 ID 分组进行排序
默认情况下,SQL Procedure
实现汇总统计的自动重新合并。
重新合并数据
在 SELECT 子句或 HAVING 子句中使用汇总函数时,您可能会在 SAS 日志中看到以下消息:
NOTE: The query requires remerging summary statistics back with the original data.
重新合并的过程涉及两次数据传递。
在第一轮中,PROC SQL
• 计算并返回汇总函数的值。然后它使用结果来计算汇总函数参与的算术表达式。
• 根据 GROUP BY 子句对数据进行分组。在第二遍中,PROC SQL 检索它需要在输出中显示的任何其他列和行。
注意:要指定 PROC SQL 不处理使用数据重新合并的查询,请使用 PROC SQL NOREMERGE 选项或 NOSQLREMERGE 系统选项。如果在设置 NOMERGE 选项或 NOSQLREMERGE 系统选项时尝试重新合并,则会将错误写入 SAS 日志。
不依赖于自动重新合并的查询类似于以下示例:
proc sql;
create table want as
select all.* from
(select make, min(msrp) as lowest from sashelp.cars group by make) as sequencer
join
sashelp.cars as all on sequencer.make = all.make
order by sequencer.lowest, all.make, all.msrp
;
该LOG
窗口将NOTE
根据lowest
使用方式显示:
NOTE: The query as specified involves ordering by an item that doesn't appear in its SELECT clause.
你可以尝试一个简单的排序:
proc sort data = have out = want;
by descending ID value;
run;
如果你想按最小值排序,那么它需要在每个观察值上。
PROC SQL;
CREATE TABLE NEED AS
SELECT DISTINCT *,min(value) as min_value
FROM HAVE
GROUP BY ID
order by min_value,id,value
;
QUIT;