limit 10
недопустимый код в SAS proc sql
. В общем, не существует хорошего способа ограничить наблюдения за выводом в SAS PROC SQL; (obs=10)
по какой-то причине недопустим в качестве параметра набора данных.
Вы также не можете order by count(*)
; вы можете заказать только по созданному столбцу.
Итак, вы можете сделать это:
proc sql;
create view work.temp as
select model, count(*) as frequency
from sashelp.cars
group by model
order by 2 desc
;
quit;
2
относится ко второму столбцу (то есть к столбцу частоты).
Если вы хотите ограничиться меньшим количеством наблюдений, вы можете использовать (obs=#)
там, где вы фактически используете представление, в некоторых случаях (но не в других - в общем, я не думаю, что это допустимо в PROC SQL в большинстве случаев).
В общем, этот конкретный запрос, вероятно, проще в базовом SAS, чем в SQL, особенно если вы хотите ограничить его вывод.
proc freq data=sashelp.cars order=freq noprint;
where origin='Asia';
tables make/out=makelist(where=(count>10) keep=make count);
run;
Это будет работать немного быстрее, чем SQL (при условии, что вы ничего не получите от представления, в любом случае; если вы выводите только несколько строк, представление вам не сильно поможет). Конечно, здесь я ограничиваюсь конкретным количеством, а не конкретным количеством наблюдений, но это почти то же самое.
Чтобы ответить на вопрос заголовка, вы можете просто выбрать 10 лучших записей из этого набора данных (при условии, что вы попросили PROC FREQ
вернуть набор данных, отсортированный по частоте, как я сделал выше):
data topten;
set makelist;
if _n_ le 10; *first 10 iterations;
run;
Или используйте proc rank
или любое количество вариантов.
person
Joe
schedule
03.07.2015
proc sql
для этого, потому что хотите изучить его, или по какой-то другой причине? - person Joe   schedule 03.07.2015PROC FREQ
иPROC MEANS
почти гарантированно будут быстрее, чемPROC SQL
для такого рода вещей, потому что они оптимизированы для того, что они делают. - person Joe   schedule 03.07.2015