【发布时间】:2016-01-05 15:54:04
【问题描述】:
我正在尝试从 200 个科目中选择前 10 个科目,每个科目可以有多行,并且每个科目都由 ID 变量唯一标识。数据按变量amount_paid(降序-美元金额)selection_flag(升序-1 或2)排序。例如,目前的数据看起来像这样,大约有 200 个唯一 ID:
ID amount_paid selection_flag group
191 $10 1 R3
101 $5 2 R2
101 $3 2 R1
750 $2 2 R0
250 $1 2 R0
我尝试过选择不同的 ID、分配枚举、合并,然后只选择数字等于或小于 10 的 ID。例如:
ID number
191 1
101 2
101 2
750 3
250 4
But using distinct changes the order of IDs:
ID number
101 1
101 1
191 2
250 3
750 4
我也尝试过 proc sql (outobs=10),但它只返回顶部行而不是顶部 ID 及其所有相关行。
所以理想情况下,我想选择前十个 id 及其各自的所有数据行,并保持按 amount_paid(升序)和 selection_group(降序)排序的顺序不变。对此的任何建议将不胜感激!
已经尝试过的示例代码:
创建 Universe 的代码(创建选择标志,因为如果在数据中需要所有 R3、R4 和 R5:
PROC SQL;
CREATE TABLE WORK.univ1 AS
SELECT distinct t1.*,
/* Selection Flag */
(case when group in ('R3','R4','R5') then 1 else 2 end) As selection_flag
FROM RawData t1 Left Join Value_Cde_Excl t2 ON (t1.ID = t2.ID)
Left Join Cond_Cde_Excl t3 ON (t1.ID= t3.CH_ICN)
Left Join Diag_Excl t4 ON (t1.ID = t4.CH_ICN)
WHERE t1.y BETWEEN 'R0' AND 'RZ' AND
t1.ID NE t2.ID AND
t1.ID NE t3.ID AND
t1.ID NE t4.ID
ORDER BY Selection_Flag,
Amt_Paid DESC,
ID;
QUIT;
Code to pull distinct ids (loses order):
PROC SQL;
CREATE TABLE WORK.sample AS
SELECT distinct ID
FROM univ1;
QUIT;
Code to put distinct ids in a macro (loses order):
/*Create a macro variable of all ICNs */
proc sql noprint;
select distinct ID
into :ID_LIST separated by ' '
from univ1;
quit;
code to select top 10 observations (keeps order, but has duplicated ids)
PROC SQL outobs=10;
CREATE TABLE WORK.sample AS
SELECT ID
FROM univ1;
QUIT;
【问题讨论】:
-
什么定义了“顶行”?如果一个 ID 有五行,每行 x 为 1,这算作最上面的行之一吗(如果 x=5 是一个最大值)?
-
乔,我应该澄清一下,顶行首先由美元金额 X 定义,其次由 y 定义。
-
您能发布一些您尝试过但不起作用的代码吗?并扩展示例数据以反映您的问题。
-
@Reeza,我已经添加了一些示例代码,并修改了数据,感谢您的帮助,如果您需要添加任何其他内容,请告诉我