首页 > 解决方案 > 根据条件 SAS 创建宏变量

问题描述

我有下表

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

我正在尝试创建一个宏变量,它将不同条目的数量最多分配十个,这样我就可以稍后为直方图自动创建正确数量的 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?

标签: selectsashavinginsert-intoproc-sql

解决方案


只需使用 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 等)仅采用一个参数并聚合该参数的值代表多个观察。


推荐阅读