Sas 计数0个值的数目
与之类似,我可以计算缺失观察的数量:Sas 计数0个值的数目,sas,Sas,与之类似,我可以计算缺失观察的数量: data dataset; input a b c; cards; 1 2 3 0 1 0 0 0 0 7 6 . . 3 0 0 0 . ; run; proc means data=dataset NMISS N; run; 但是我如何计算0的观察数呢?如果要计算0的观察数,您需要使用proc tablate或proc freq,并进行频率计数 如果您有很多值,并且只想要“0/而不是0”,那么使用格式很容易做到这一点 data have; i
data dataset;
input a b c;
cards;
1 2 3
0 1 0
0 0 0
7 6 .
. 3 0
0 0 .
;
run;
proc means data=dataset NMISS N;
run;
但是我如何计算
0
的观察数呢?如果要计算0的观察数,您需要使用proc tablate
或proc freq
,并进行频率计数
如果您有很多值,并且只想要“0/而不是0”,那么使用格式
很容易做到这一点
data have;
input a b c;
cards;
1 2 3
0 1 0
0 0 0
7 6 .
. 3 0
0 0 .
;
run;
proc format;
value zerof
0='Zero'
.='Missing'
other='Not Zero';
quit;
proc freq data=have;
format _numeric_ zerof.;
tables _numeric_/missing;
run;
沿着这些路线的东西。显然,要小心使用
\u numeric\u
,因为这都是数值变量,如果有很多,可能会很快变得混乱…最容易使用的PROC-SQL
。您必须使用联合
来复制方法
输出
第一个FROM
的每个部分对每个变量的0值进行计数,并将其堆叠起来
最后一节仅统计数据集中的观察数
proc sql;
select n0.Variable,
n0.N_0 label="Number 0",
n.count as N
from (
select "A" as Variable,
count(a) as N_0
from dataset
where a=0
UNION
select "B" as Variable,
count(b) as N_0
from dataset
where b=0
UNION
select "C" as Variable,
count(c) as N_0
from dataset
where c=0
) as n0,
(
select count(*) as count
from dataset
) as n;
quit;
我补充这一点作为补充回答。它要求您具有PROC IML
这使用矩阵操作进行计数
(ds=0)
——创建一个包含0/1个值(假/真)的矩阵,其中值为0
[+,]
——对所有列的行求和。如果我们有0/1个值,那么这是每个列的值=0的数目
”
——运算符是转置
||
——合并矩阵{0}|{1}={01}
然后我们只打印值
proc iml;
use dataset;
read all var _num_ into ds[colname=names];
close dataset;
ds2 = ((ds=0)[+,])`;
n = nrow(ds);
ds2 = ds2 || repeat(n,ncol(ds),1);
cnames = {"N = 0", "Count"};
mattrib ds2 rowname=names colname=cnames;
print ds2;
quit;
proc freq中有级别选项可供使用
proc freq data=dataset levels;
table _numeric_;
run;
顺便说一下,瑞克的文章和第二部分很相似。我不确定我会认为所有的打字都很简单。我会把它放在宏IRL中。