我有下表
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?
答案 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;