【发布时间】:2018-10-03 21:18:08
【问题描述】:
假设我有这个 MWE 数据:
data v;
input var1 $ var2 var3 $;
datalines;
cat 3 yes
sheep 2 no
sheep 3 maybe
pig 3 maybe
goat 3 maybe
cat 2 no
pig 1 no
cat 2 no
pig 1 no
goat 3 no
cat 3 no
cat 2 yes
cat 1 yes
sheep 3 no
cat 2 no
cat 1 maybe
;
run;
我使用 proc tabulate 来计算每个值的观察次数。我对每个变量都这样做:
proc tabulate data=v;
class var1;
table (var1='' all="Total"),(N pctn);
quit;
proc tabulate data=v;
class var2;
table (var2='' all="Total"),(N pctn);
quit;
proc tabulate data=v;
class var3;
table (var3='' all="Total"),(N pctn);
quit;
我得到如下输出:
N PctN
cat 8 50.00
goat 2 12.50
pig 3 18.75
sheep 3 18.75
Total 16 100.00
N PctN
1 4 25.00
2 5 31.25
3 7 43.75
Total 16 100.00
N PctN
maybe 4 25.00
no 9 56.25
yes 3 18.75
Total 16 100.00
我的问题是: 如何以以下格式将其导出到 Excel 中?:
Name Cat 1 N1 N1% Cat 2 N2 N2% Cat 3 N3 N3% Cat 4 N4 N4% Missing % Total Total%
var1 cat 8 50 goat 2 12.5 pig 3 18.75 sheep 3 18.75 0 16 100
var2 1 4 25 2 5 31.25 3 7 43.75 0 16 100
var3 maybe 4 25 no 9 56.25 yes 3 18.75 0 16 100
换句话说,我希望每个不同的变量都有自己的行。变量的每个值都将出现在这一行中,其中包含观察次数和总观察次数的百分比。最后三列是额外的,但不是必需的:缺失观察的百分比和数量以及变量值的总数。我该怎么做?
请注意,我是 SAS 的新手。也欢迎对代码进行任何改进,例如如何循环或压缩代码以生成表格。
【问题讨论】:
-
这是一个糟糕的结构,原因有很多,你找不到简单的方法。对于单个表,我建议您向下而不是交叉,您可以使用单个 PROC FREQ 来获取数据。由于 all 列似乎毫无意义,不知道为什么要包括在内。如果您想丢失,proc freq 将使用 missing 选项来支持它。如果您对此感兴趣,请告诉我,我会发布代码。
-
如果你真的需要这个结构,可以使用我的方法,转置数据。
-
遇到超过4个类别的变量怎么办?你试过什么了?导出到 excel 很简单,但是将数据转换成您想要的形状需要大量的转置和附加。
-
如果有四个以上的类别,我会想要更多的列。总列可以排在第一位是没有问题的。我还没有真正尝试过任何东西。
标签: excel sas export export-to-excel summary