标题: 请教如何统计这种表中的各种值的个数~~ [打印本页] 作者: shiyiming 时间: 2008-5-5 10:23 标题: 请教如何统计这种表中的各种值的个数~~ 数据集的一部分如下:
p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 ...
s1 a b c b b a c c a a
s2 c c b a a a b c c c
s3 a a b c b a a c b c
...
data result;
merge result aa;
by id;
run;
%end;
%mend;
%a;
[/code:35joer9x]作者: shiyiming 时间: 2008-5-6 09:09 标题: Re: 请教如何统计这种表中的各种值的个数~~ 先多谢楼上byes大牛的回复!
不过我发现我表述的有些问题,我的疑惑应该如下:
数据集的一部分如下:
p1 p2 p3 p4 p5 p6 p7 ...
case1 a b c b b a c c a a
control1 c c b a a a b c c c
case2 a a b c b a a c b c
control2 b b c a a c b a c b
control3 c c c a a c c b c c
...
想要通过统计生成如下的表:
Na Nb Nc
case * * *
control * * *
Na,Nb,Nc分别是case和control里a,b,c的个数
(就是说不用单独求每一行的a,b,c各自的总数了,只用case的统计到一起,control的统计到一起)
请问上述过程如何用SAS代码实现?
另外,得到这样的2*3的表之后,如何求相应的卡方值,并在自由度为2的情况下返回P值?
由于自己是SAS白痴,看一本入门教程貌似没找到解决方法,所以特求教各位大牛了!
期待赐教!不胜感激!作者: shiyiming 时间: 2008-5-6 20:00 标题: Re: 请教如何统计这种表中的各种值的个数~~ [code:37ozm8cr]
data a;
array p{0:7} $ s p1-p7;
input s p1-p7;
cards;
case1 a b c b b a c c a a
control1 c c b a a a b c c c
case2 a a b c b a a c b c
control2 b b c a a c b a c b
control3 c c c a a c c b c c
;
run;
data b;
set a;
length group $8;
array p{*} p1-p7;
if 'case'=:s then group='case';
else if 'control'=:s then group='control';
na=0;nb=0;nc=0;
do i=1 to dim(p);
if p(i)='a' then na+1;
else if p(i)='b' then nb+1;
else if p(i)='c' then nc+1;
end;
run;
proc means data=b nway noprint;
class group;
var na nb nc;
output out=b(drop=_type_ _freq_) sum=;
run;
[/code:37ozm8cr]作者: shiyiming 时间: 2008-7-29 11:15 标题: Re: 请教如何统计这种表中的各种值的个数~~ data a;
array p{0:10} $ s p1-p10;
input s p1-p10;
cards;
case1 a b c b b a c c a a
control1 c c b a a a b c c c
case2 a a b c b a a c b c
control2 b b c a a c b a c b
control3 c c c a a c c b c c
;
run;
data case ;
set a;
if index(s,'case')>0 then do;
s='case';
output;
end;
run;
data control ;
set a;
if index(s,'control')>0 then do;
s='control';
output;
end;
run;
data case2 (keep=s aa bb cc);
set case nobs=total;
array q{0:10} $ _all_;
s=q[0];
retain aa 0 bb 0 cc 0 ;
do i=1 to 10;
if q[i]='a' then aa=aa+1;
if q[i]='b' then bb=bb+1;
if q[i]='c' then cc=cc+1;
end;
if _n_=total then output;
run;
data control2 (keep=s aa bb cc);
set control nobs=total;
array q{0:10} $ _all_;
s=q[0];
retain aa 0 bb 0 cc 0 ;
do i=1 to 10;
if q[i]='a' then aa=aa+1;
if q[i]='b' then bb=bb+1;
if q[i]='c' then cc=cc+1;
end;
if _n_=total then output;
run;
data result (keep=s aa bb cc);
set case2 control2 ;
run;
proc transpose data=result
out=chisq
(rename=(col1=f _NAME_=c));
by s;