SAS中如何分组计数,并将值保存到宏变量

介绍两个常用的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.;

程序运行的结果和日志如下:

Results
Log1
  • 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.;

程序输出的日志结果如下:


Log2

对于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.;

日志输出结果如下:

Log3

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

你可能感兴趣的:(SAS中如何分组计数,并将值保存到宏变量)