我正在尝试在SAS中创建一个表,它是较大表的子集。我使用下面的图表作为例子。如您所见,columnA有501和502重复两次。我想要的是在ColumnB中选择具有最大数字的行。第二张图是我想要的结果。
图1
A B C
501 1 O
502 1 K
503 1 V
501 2 Y
502 2 U
504 1 I
图2
A B C
503 1 V
501 2 Y
502 2 U
504 1 I
我现在想的是:
PROC SQL;
CREATE TABLE CHART2 AS
SELECT
C.COLUMNA,
C.COLUMNC
FROM CHART1 C;
QUIT;
我不确定怎么说当columnA中有重复的行时,只选择columnB具有最大数量的行。表的格式有点怪异。我希望你明白我的观点。
答案 0 :(得分:0)
一种选择是使用having
中的proc sql
子句。将其视为在完成任何分组后应用的过滤器。
proc sql noprint;
create table want as
select *
from sashelp.class
group by sex
having age = max(age)
;
quit;
在上面的代码中,我们保留行上年龄值等于该性别的最大年龄(max(age)
)的行(因为我们按性别分组)。
你会在结果中注意到,对于女性,我们得到两行返回,因为有两个记录的年龄等于最大女性年龄,但只有一行是男性。
如果没有关于您的数据的更多详细信息,我无法确定这完全符合您的需求,但可能会这样。
答案 1 :(得分:0)
你可以试试这个:
PROC SORT data = Chart1;
by A descending B;
RUN;
DATA Chart2;
set Chart1;
by A;
if first.A then output;
RUN;
第一步按A的升序排序您的数据,然后按B的降序排序。第二步仅为A的每个值保留第一行。