SAS中文论坛

标题: 求助一个数据合并问题 [打印本页]

作者: 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;

quit;
这样已经实现楼主要求!
作者: shiyiming    时间: 2008-12-23 14:34
标题: Re: 求助一个数据合并问题
傻孩子,在有缺失值的情况下,COUNT(A) COUNT(*)是有区别的。

[code:107vq053]data ahuige;
    input a;
    cards;
  1
  2
  .
  ;
  run;

  proc sql;
     select count(a) as counta, count(*) as counts
     from ahuige
     ;[/code:107vq053]
作者: shiyiming    时间: 2008-12-24 09:18
标题: Re: 求助一个数据合并问题
从其它行转SAS,以为SQL语句都一样
受教!!谢谢提醒。
作者: Qiong    时间: 2008-12-29 16:18
标题: Re: 求助一个数据合并问题
弱弱问一下,那如果k的值是1 或2,a的值是 'Y' 或'N',要求同时对k=1,a='Y'进行类似的统计的话,有比较简洁的好方法么?
作者: shiyiming    时间: 2008-12-29 18:58
标题: Re: 求助一个数据合并问题
to ahuige,居然换了这么有迷惑性的头像。。。。

Happy Holidays! <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
作者: shiyiming    时间: 2008-12-29 19:04
标题: Re: 求助一个数据合并问题
to superkuhasu,不能怪他,是我干的。我看他的头像link失效,显示红叉,所特意帮他挑了现在这个具有迷惑性的。哇哈哈哈。
作者: shiyiming    时间: 2008-12-29 19:29
标题: Re: 求助一个数据合并问题
原来我一不小心收到了这样一个特殊的圣诞礼物。。。。。。。。。。。。。。。。 <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2