SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2139|回复: 8
打印 上一主题 下一主题

如何直接算出百分比?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-12-25 15:33:42 | 只看该作者

如何直接算出百分比?

data a;
input  group $  x  y;
cards;
a  12 14
a  9  32
b  13 15
b  21  25
b  10   14
c  20  12
;
run;
想计算出每个group中的x值的和与所有X的总和的比例. 如果分两步做,很简单,一次算每个group的和,然后再算总和,两个比一下.
但如果在一步里实现的话,该如何做? SQL或者data step,不限.
谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-12-25 16:23:34 | 只看该作者

Re: 如何直接算出百分比?

[code:1v49n4sb]data a;
        input group $ x y;
cards;
a 12 14
a 9 32
b 13 15
b 21 25
b 10 14
c 20 12
;

data b;
        sum_x=0;
        do _n_=1 by 1 until(last.group);
                set a;
                by group;
                sum_x+x;
        end;
        do _n_=1 to _n_;
                set a;
                pct_x=round(x/sum_x,0.01);
                output;
        end;
run;[/code:1v49n4sb]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-12-26 01:42:57 | 只看该作者

Re: 如何直接算出百分比?

谢谢hopewell.
我想要的是group的和/总和.
比如:
group a: 21/85
group b: 44/85
group c: 20/85

随便问一下: proc sql里有没有可能用case算总和,或inter query的方法算总和.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-12-26 03:07:18 | 只看该作者

Re: 如何直接算出百分比?

I hope this works for you.  <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

[code:3otk6x9h]data a;
   input group $ x y;
cards;
a 12 14
a 9 32
b 13 15
b 21 25
b 10 14
c 20 12
;
run;

proc sql;
  create table results as
    select x&#46;group,
           x&#46;sumX / y&#46;sumX as pct
      from (select group,
                   sum(x) as sumX
              from a
              group by group
           ) as x
           inner join
           (select sum(x) as sumX
              from a
           ) as y
           on 1 = 1;
run;
[/code:3otk6x9h]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-12-26 10:35:49 | 只看该作者

Re: 如何直接算出百分比?

data step
[code:1hh18sc7]data b(keep=group pct);
   subtotal=0;
   if _n_=1 then
      do until(eof);
             set a end=eof;
                 total+x;
          end;
   do _n_=1 by 1 until(last&#46;group);
      set a;
      by group;
      subtotal+x;
   end;
   pct=subtotal/total;
run;[/code:1hh18sc7]
sql
[code:1hh18sc7]proc sql;
        create table c as
                select group,sum(x)/total as pct
                          from a, (select sum(x) as total from a)
                          group by group;
quit;[/code:1hh18sc7]
proc tabulate
[code:1hh18sc7]ods output table=d(keep=group x_pctsum_0 rename=(x_pctsum_0=pct));
proc tabulate data=a;
        var x;
        class group;
        table group,x*pctsum;
run;
ods output close;[/code:1hh18sc7]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-12-26 12:00:05 | 只看该作者

Re: 如何直接算出百分比?

I like the [i:o6biegf4]proc tabulate[/i:o6biegf4] one. Thank you hopewell! <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-12-26 14:37:31 | 只看该作者

Re: 如何直接算出百分比?

不佩服不行. 谢谢上面几位!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2010-1-24 15:36:40 | 只看该作者

Re: 如何直接算出百分比?

我也来学学 谢谢各位
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2010-2-17 07:15:46 | 只看该作者

Re: 如何直接算出百分比?

yet another solution using PROC FREQ:

*****************************;
data a;
input group $ x y;
cards;
a 12 14
a 9 32
b 13 15
b 21 25
b 10 14
c 20 12
;
run;

proc freq data=a;
     weight x;
    table group/out=_have;
run;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-6 11:34 , Processed in 0.068513 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表