Я бы использовал PROC SQL для этого.
Вот пример, который получает «d» в макропеременной, а затем фильтрует исходный набор данных, как указано в вашем вопросе.
Это будет работать, даже если есть многопользовательская связь для наиболее частых наблюдений.
data tbl;
input col: $1.;
datalines;
a
a
b
b
b
b
c
c
c
c
d
d
d
;run;
proc sql noprint;
create table tbl_freq as
select col, count(*) as freq
from tbl
group by col;
select quote(col) into: mode_values separated by ', '
from tbl_freq
where freq = (select max(freq) from tbl_freq);
quit;
%put mode_values = &mode_values.;
data tbl_filtered;
set tbl;
where col in (&mode_values.);
run;
Обратите внимание на использование QUOTE(), которая необходима, чтобы обернуть значения Col в кавычки (пропустить это, если столбец является числовым переменным).
Вы можете сохранить сортировку, добавив ORDER = FREQ в инструкцию proc freq. – mvherweg
А, вот какой вариант. В слишком большой спешке, чтобы посмотреть, спасибо! – Joe
Thnaks, но я предпочел бы получить «d» в макропеременной, как я могу это сделать? – statquant