создать макропеременную на основе условия SAS - PullRequest
0 голосов
/ 24 октября 2018

У меня есть следующая таблица

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 ]

0 голосов
/ 24 октября 2018

Вы пытаетесь поместить 10 в список макросов, тогда вы можете использовать outobs =, чтобы ограничить записи.Вопрос в том, какие 10 записей вы хотите, когда их больше 10?

PROC SQL outobs=10;
SELECT X1
    INTO: BIN_X1 separated by ","
    FROM HAVE;
    QUIT;

    %put &Bin_x1;
0 голосов
/ 24 октября 2018

Просто используйте функцию 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 и т. д.) принимают только один аргумент и агрегируют значения, которые аргумент представляет в нескольких наблюдениях.

...