Создать макропеременную на основе условия SAS
У меня есть следующая таблица
data have;
input x1;
datalines;
1
2
3
4
5
6
7
8
9
10
11
;
run;
и я пытаюсь создать макропеременную, которая распределяет количество различных записей максимум до десяти, чтобы я мог автоматически создать правильное количество бинов для гистограммы позже (макс. 10 бинов)
код, который я сейчас пытаюсь использовать, выглядит следующим образом, но я не уверен, как распределить макропеременную при наличии более 10 различных наблюдений
PROC SQL NOPRINT;
SELECT COUNT(DISTINCT X1)
INTO: BIN_X1
FROM HAVE
HAVING (COUNT(DISTINCT X1) LE 10);
QUIT;
Как выделить макропеременную равной 10, если существует более 10 различных объектов?
2 ответа
Просто используйте функцию SAS min(,)
усечь счет до максимум 10.
proc sql noprint;
select min(count(distinct x1),10)
into :bin_x1 trimmed
from have
;
quit;
Так что агрегатная функция SQL count()
увидит, сколько различных значений X1 существует в наборе данных, а затем функция SAS min(,)
выберет минимум этого числа и 10.
Обратите внимание, что функции SAS (min,max и т. Д.) Принимают два или более аргумента и работают только с этими аргументами для текущего наблюдения, но агрегатные функции SQL (min,max и т. Д.) Принимают только один аргумент и агрегируют значения этого аргумента. представляет через несколько наблюдений.
Вы пытаетесь поместить 10 в список макросов, тогда вы можете использовать outobs=, чтобы ограничить записи. Вопрос в том, какие 10 записей вы хотите, когда их больше 10?
PROC SQL outobs=10;
SELECT X1
INTO: BIN_X1 separated by ","
FROM HAVE;
QUIT;
%put &Bin_x1;