Sorting 在SAS中按各组的最小值按值的升序排序

Sorting 在SAS中按各组的最小值按值的升序排序,sorting,sas,grouping,proc-sql,Sorting,Sas,Grouping,Proc Sql,我尝试按每个组的最小值按升序排序。我尝试了几种不同的组合使用分组和排序,但无法按组正确排序。最有效的方法是什么 我试过这个: PROC SQL; CREATE TABLE NEED AS SELECT DISTINCT * FROM HAVE GROUP BY ID,VALUE ORDER BY VALUE; QUIT; 使用此输出,并认为它将根据ID的分组进行排序 您可以尝试一种简单的排序: proc sort data = have out = want; by descendi

我尝试按每个组的最小值按升序排序。我尝试了几种不同的组合使用分组和排序,但无法按组正确排序。最有效的方法是什么

我试过这个:

PROC SQL;
CREATE TABLE NEED AS 
SELECT DISTINCT *
FROM HAVE
GROUP BY ID,VALUE
ORDER BY VALUE;
QUIT; 
使用此输出,并认为它将根据ID的分组进行排序


您可以尝试一种简单的排序:

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; 

默认情况下,
SQL过程
实现汇总统计信息的自动重新合并

重新合并数据

在SELECT子句或HAVING子句中使用摘要函数时,您可能会在SAS日志中看到以下消息:
注意:查询需要重新合并摘要
统计数据与原件一起返回
数据。

重新融合的过程涉及两次数据传递

在第一个过程中,PROC SQL
•计算并返回摘要函数的值。然后,它使用结果计算summary函数参与的算术表达式。
•根据GROUP BY条款对数据进行分组

在第二步中,procsql检索它需要在输出中显示的任何其他列和行

注意:要指定PROC SQL不处理使用数据重新合并的查询,请使用PROC SQL NORREMGE选项或NOSQLREMGE系统选项。如果在设置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
窗口将根据
lower
的使用方式显示
注释

NOTE: The query as specified involves ordering by an item that doesn't appear in its SELECT clause.

你尝试了什么?尝试的问题是什么?请发布代码和。好的,我发布了代码和示例。您想按ID值的最小值对ID进行排序吗?如果是这样的话,那么您需要在该ID的每次观察中都具有该最小值。虽然这可能是允许的SAS查询,但它违反了SQL标准的规则,因为
*
分组依据一起使用。此查询应在SAS之外失败。SAS可能会发出警告。也许未来的SAS版本将支持用于内联聚合的窗口函数:
MIN(value)OVER(partitionbyid)
。另外,您不应该在
ORDER BY中使用
COMPUTED
?当然,在其他SQL实现中,您可能仅限于通过子查询生成min并重新合并它,但是获取一个可以用来排序的实际变量的概念是很重要的。是的,谢谢你的这个结果,因为它比我正在研究的另一个更优雅:PROC sort DATA=HAVE;按ID值;跑数据需求;集有;计数+1;按身份证;如果FIRST.ID,则COUNT=1;跑PROC-SQL;创建表NEED2,根据ID、值、最小值、ID从需求组中选择DISTINCT*;退出谢谢你的帖子,但这并不是根据每个ID组的最小值进行排序。