标题: 求助一个数据合并问题 [打印本页] 作者: shiyiming 时间: 2008-12-12 03:57 标题: 求助一个数据合并问题 我有一组数据按group排列,对于group中的每一个人,k=1 or 0, a=1 or 0, 我想求这个group中k=1和a=1的百分比. 数据简单写为:
data temp;
input group k a;
cards;
11 1 0
11 0 1
11 1 0
22 1 0
22 1 0
33 0 1
33 0 0
33 0 0
;
run;
proc sort data=temp; by group; run;
我希望的输出为:
group k a sum
11 2 1 3
22 2 0 2
33 0 1 2
然后通过这个求百分比。 我尝试用 first. and last., 没有实现。请求各位帮助!作者: shiyiming 时间: 2008-12-12 06:59 标题: Re: 求助一个数据合并问题 [code:3t1p1yex]
options validvarname=any;
data temp1(drop=k a);
if 0 then set temp(keep=group);
'k=1'n=0;
'a=1'n=0;
do sum=1 by 1 until(last.group);
set temp;
by group;
'k=1'n + (k=1);
'a=1'n + (a=1);
end;
run;
[/code:3t1p1yex]
另外还有很多办法。
不过呢,其实您最好手工数,这样领导看您忙,才会有好报!作者: shiyiming 时间: 2008-12-12 09:53 标题: Re: 求助一个数据合并问题 [code:2xiyv2ak]proc sql;
select group, sum(k)/count(k)*100 as percentk,sum(a)/count(a)*100 as percenta
from temp
group by group
;[/code:2xiyv2ak]作者: shiyiming 时间: 2008-12-12 14:09 标题: Re: 求助一个数据合并问题 需要好多代码啊。
data ex(keep=kpec apec);
set temp;
by group;
retain t1-t4 kpec apec ;
if first.group then
do;
t1=0; t2=0;t3=0;t4=0;
end;
t1+k; t2+1;
t3+a; t4+1;
kpec=t1/t2;
apec=t3/t4;
if last.group then output ;
run;作者: shiyiming 时间: 2008-12-12 18:21 标题: Re: 求助一个数据合并问题 [code:2owsyfs1]data result(drop=k a count);
set temp;
by group;
retain sum_k sum_a count;
if first.group then do;
sum_k=0; sum_a=0; count=0;
end;
sum_k+(k=1);sum_a+(a=1);count+1;
if last.group then do;
sum_k=sum_k/count;sum_a=sum_a/count;output;
end;
format sum_k sum_a percent8.2;
run;[/code:2owsyfs1]作者: shiyiming 时间: 2008-12-22 21:18 标题: Re: 求助一个数据合并问题 data a1.tmp(drop=k a);
set a1.tmp;
by group;
retain num1 num2 0;
if first.group then do;
num1=0;
num2=0;
end;
if k=1 then do;
num1=sum(num1,1);
end;
if a=1 then do;
num2=sum(num2,1);
end;
if last.group then do;
sum=num1+num2;
output;
end;
run;作者: shiyiming 时间: 2008-12-23 12:39 标题: Re: 求助一个数据合并问题 [quote="ahuige":2prqo7oo][code:2prqo7oo]proc sql;
select group, sum(k)/count(k)*100 as percentk,sum(a)/count(a)*100 as percenta
from temp
group by group
;[/code:2prqo7oo][/quote:2prqo7oo]
正解,只是count(a) 和count(k)效果都是一样。没必要分开
proc sql;
select Group , sum(k) as k , sum(a) as a , count(*) as Num from temp group by group;