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