Создать макропеременную на основе условия 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;
Другие вопросы по тегам