如何在SAS中创建自定义频率表

时间:2015-02-09 01:16:32

标签: sas

假设我有一个名为orig的数据,其变量为x和s,s为二进制,如下所示:

x  s
12 1
3  0
3  0
34 1  
12 0

我想创建一个类似于orig频率表的新表或数据。第一列将是x中出现的变量,第二列将是s变量的数量" 1"对于那些x,第三列将是" 0"最后一个将是x的总数。如果我们使用上面的表作为例子 我期待的新表是:

x    "0 of s"    "1 of s"   total
3      1          1         2
12     1          1         2
34     0          1         1

2 个答案:

答案 0 :(得分:2)

proc sql中非常简单明了。如果表达式为真,则使用group by语句和sum汇总函数评估为1,如果表达式为真,则使用0

proc sql;
create table newtable as
select
  x,
  sum(s=0) '0 of s',
  sum(s=1) '1 of s',
  sum(1) as total
from orig
group by x;
quit;

答案 1 :(得分:1)

我认为这是你正在寻找的东西。对于你的x = 3输出,我认为你想要" 0的s" = 2," 1的s" = 0,但是,为了与原始数据集保持一致给。

data orig;
        input x s;
        datalines;
12 1
3  0
3  0
34 1
12 0
;

proc print data=orig;
        title 'Original Dataset';
run;

proc sort data=orig;
        by x;
run;

data orig_collapsed;
        set orig;
        retain s0 s1;
        by x;

        if first.x then do;
                s0=0;
                s1=0;
        end;


        if s=0 then s0=s0+1;
        if s=1 then s1=s1+1;

        if last.x then do;
                total = s0 + s1;
                output;
        end;

        keep x s0 s1 total;
run;

proc print data=orig_collapsed noobs;
        title 'Collapsed Dataset';
run;