SAS中的条件选择

时间:2016-10-07 19:33:26

标签: sql sas

我正在尝试在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具有最大数量的行。表的格式有点怪异。我希望你明白我的观点。

2 个答案:

答案 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的每个值保留第一行。