介绍两个常用的SAS分组计数,并将计数值保存到宏变量中的方法:
- 1、使用Proc Freq进行计数,通过Data步将数值保存再宏变量中;
proc freq data=sashelp.class;
tables sex / out=bign list;
title "Big N";
run;
data _null_;
set bign;
call symput(cats("trt_", sex), cats(count));
run;
%put M = &trt_m.;
%put F = &trt_f.;
程序运行的结果和日志如下:


- 2、使用Proc SQL 直接计数并赋值宏变量。
proc sql noprint;
select count(name) into : trt_f
from sashelp.class
where sex = "F";
select count(name) into : trt_m
from sashelp.class
where sex = "M";
quit;
%put M = &trt_m.;
%put F = &trt_f.;
程序输出的日志结果如下:

对于Proc SQL使用,还有一个取巧的方法,不过有出偏误的风险。计数时不使用where
语句进行筛选特定组别,直接使用group by
语句进行分组。这时候,计数就会有两个值,两个值保存到宏变量trt1 和 trt2中。这里宏变量名称只能通过 ‘-’ 连接,并且以数字结尾。宏变量与组别的对应关系,是与分组变量排序顺序一致的, 这里的对应关系没直接写条件那样明显。
proc sql noprint;
select count(name) into :trt1 - :trt2
from sashelp.class
group by sex;
quit;
%put M = &trt2.;
%put F = &trt1.;
日志输出结果如下:

若有疑问,欢迎评论区留言。
以上。
网友评论