1

如何管理 proc 表格以显示具有缺失值而不是其统计数据的变量的值?谢谢!

例如,我想显示 sym 的值。它取值“x”或缺失值。我该怎么做?

示例代码:

data test;
input tx mod bm $ yr sym $;
datalines;
1   1   a   0   x
1   2   a   0   x
1   3   a   0   x
2   1   a   0   x
2   2   a   0   x
2   3   a   0   x
3   1   a   0   
3   2   a   0   
3   3   a   0   x
1   1   b   0   x
1   2   b   0   
1   3   b   0   
1   4   b   0   
1   5   b   0   
2   1   b   0   
2   2   b   0   
2   3   b   0   
2   4   b   0   
2   5   b   0   
3   1   b   0   x
3   2   b   0   
3   3   b   0   
1   1   c   0   
1   2   c   0   x
1   3   c   0   
2   1   c   0   
2   2   c   0   
2   3   c   0   
3   1   c   0   
3   2   c   0   
3   3   c   0   
1   3   a   1   x
2   3   a   1   
3   3   a   1   
1   3   b   1   
2   3   b   1   
3   3   b   1   
1   3   c   1   x
2   3   c   1   
3   3   c   1   
;
run;

proc tabulate data=test;
class yr bm tx mod ;
var sym;
table yr*bm, tx*mod;
run;

我希望决赛桌是这样的。 谢谢!

4

1 回答 1

2
proc tabulate data=test;
class tx mod bm  yr sym;
table yr*bm, tx*mod*sym*n;
run;

这为每个 SYM=x 提供了一个(因为 n=missing)。这隐藏了 SYM=missing 的行,因此您错过了示例表中的一些值。(您可以使用轻松定义 1 = 'x' 的格式来格式化列)。

proc tabulate data=test;
class tx mod bm  yr;
class sym /missing;
table yr*bm, tx*mod*sym=' '*n;
run;

这为您提供了 4 个主要变量的所有组合,但包括缺少的符号作为它们自己的列。

如果你也想吃蛋糕,那么你需要将 SYM 重新定义为一个数字变量,这样你就可以将它用作 VAR。

proc format;
invalue ISYM
x=1
;
value FSYM
1='x';
quit;

data test;
infile datalines truncover;
input tx mod bm $ yr sym :ISYM.;
format sym FSYM.;
datalines;
1   1   a   0   x
1   2   a   0   x
1   3   a   0   x
... more lines ...
;
run;

proc tabulate data=test;
class tx mod bm  yr;
var sym;
table yr*bm, tx*mod*sym*sum*f=FSYM.;
run;

所有这些都假设这些是唯一的组合行。如果你开始有多个 yr*bm*tx*mod,你会在这里遇到问题,因为这不会给你预期的结果(总和 1+1+1=3 不会给你一个'x')。

于 2013-02-21T20:44:12.513 回答