根据条件 SAS 创建宏变量

create a macro variable based on a condition SAS

我有以下table

data have;
    input x1;
    datalines;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ;
run;

并且我正在尝试创建一个宏变量,该变量最多分配 10 个不同的条目,这样我以后就可以自动为直方图创建正确数量的 bin(最多 10 个 bin)

我目前尝试利用的代码如下,但我不确定当有超过 10 个不同的观察时如何分配宏变量

PROC SQL NOPRINT;
    SELECT COUNT(DISTINCT X1)
        INTO: BIN_X1
        FROM HAVE
        HAVING (COUNT(DISTINCT X1) LE 10);
QUIT;

如果有超过10个不同的obs,我如何分配宏变量为10?

只需使用 SAS 函数 min(,) 将计数截断为最大值 10。

proc sql noprint;
  select min(count(distinct x1),10)
    into :bin_x1 trimmed
  from have
  ;
quit;

因此 SQL 聚合函数 count() 将查看数据集中存在多少个不同的 X1 值,然后 SAS 函数 min(,) 将 select 的最小值那个数字和 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;