根据条件SAS创建宏变量

时间:2018-10-24 17:12:17

标签: select sas having insert-into proc-sql

我有下表

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?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

您要在宏列表中放入10,然后可以使用outobs =限制记录。问题是当数量超过10条时,您想要哪10条记录?

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

    %put &Bin_x1;