#sql #sas
#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 имеет максимальное число. Форматирование таблицы немного странное. Я надеюсь, вы поняли мою точку зрения.
Ответ №1:
Одним из вариантов является использование having
предложения in proc sql
. Думайте об этом как о фильтре, который применяется после выполнения любых группировок.
proc sql noprint;
create table want as
select *
from sashelp.class
group by sex
having age = max(age)
;
quit;
В приведенном выше коде мы сохраняем строки, в которых значение возраста в строке равно максимальному возрасту ( max(age)
) для этого пола (поскольку мы группируем по полу).
Вы заметите в результатах, что для женщин мы возвращаем две строки, потому что было две записи, возраст которых был равен максимальному возрасту женщины, но только одна строка для мужчин.
Без дополнительной информации о ваших данных я не могу быть уверен, что это будет точно соответствовать вашим потребностям, но это возможно.
Комментарии:
1. Вы правы! Большое вам спасибо! Я использовал max в предложении select, которое выглядит как select columnA, max(coumnB) из группы chart1 по columnA. Однако это работает только тогда, когда я не включаю ColumnC в выделение.
Ответ №2:
Вы можете попробовать это:
PROC SORT data = Chart1;
by A descending B;
RUN;
DATA Chart2;
set Chart1;
by A;
if first.A then output;
RUN;
На первом шаге данные сортируются в порядке возрастания A, а затем в порядке убывания B. На втором шаге сохраняется только первая строка для каждого значения A.