如何通过proc表格显示变量值?

时间:2013-02-21 15:54:50

标签: sas

如何管理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;

I want the final table to be like this. Thanks!

1 个答案:

答案 0 :(得分:2)

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

这为每个SYM = x提供了一个(因为n =缺失)。这会隐藏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个主要变量的所有组合,但包含缺少的syms作为自己的列。

如果您想吃蛋糕并且也吃它,那么您需要将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')。 / p>