在SAS中等效的Access交叉表查询?

oob*_*oob 5 sas

这是我的输入:

ID  Color
1   green
1   red
1   orange
1   green
1   red
2   red
2   red
2   blue
3   green
3   red

这是我在输出中想要的内容 - 每种颜色的ID记录数:

ID  green  red  orange blue
1   2      2    1      0
2   0      2    0      1
3   1      1    0      0

我知道我可以使用proc freq获取信息,但我想输出一个与我上面写的完全相同的数据集.我似乎无法弄清楚如何使颜色成为此输出数据集中的列.

rko*_*ann 5

首先,生成数据.

data data;
    format ID 8. Color $8.;
    input id color;
datalines;
1   green
1   red
1   orange
1   green
1   red
2   red
2   red
2   blue
3   green
3   red
run;
Run Code Online (Sandbox Code Playgroud)

接下来,按ID汇总颜色计数.

proc freq data=data noprint;
    table id*color / out=freq;
run;
Run Code Online (Sandbox Code Playgroud)

使桌子平坦.

proc transpose data=freq out=freq_trans(drop=_:);
    id color;
    by id;
    var count;
run;
Run Code Online (Sandbox Code Playgroud)

可选地,用0填充缺少的单元格.

data freq_trans_filled;
    set freq_trans;
    array c(*) green red orange blue;
    do i = 1 to dim(c);
        if c[i]=. then c[i]=0;
    end;
    drop i;
run;
Run Code Online (Sandbox Code Playgroud)