SAS中文论坛

标题: do to [打印本页]

作者: shiyiming    时间: 2010-1-28 08:13
标题: do to
[u:3arq3qdc][color=#000000:3arq3qdc][b:3arq3qdc]如果想对datalines卡的数据作分类汇总(相同的数据作一个计数汇总),用do  to 实现怎么实现?[/b:3arq3qdc][/color:3arq3qdc][/u:3arq3qdc]
作者: shiyiming    时间: 2010-1-29 15:49
标题: To hopewell
劳烦hopewell帮助解答,我知道您一定会的。谢谢。
作者: shiyiming    时间: 2010-1-29 16:11
标题: Re: do to
do to是什么?是do loop吗?
不太明白分类汇总跟do loop有什么关系,方便的话举个例子.
作者: shiyiming    时间: 2010-1-29 22:59
标题: Re: do to
比如:
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 一组数据var:1 2 2 3 4 4 3 57 5 8 9很多数据,统计var中,1的个数 2 的个数……该用什么方法解决呢?谢谢hopewell.
作者: shiyiming    时间: 2010-1-29 23:47
标题: Re: do to
[code:yag7gay5]data a;
        input var @@;
datalines;
1 2 2 3 4 4 3 57 5 8 9
;

proc sql;
   create table b as
      select var,n(var) as n
           from a
           group by var;
quit;[/code:yag7gay5]
作者: shiyiming    时间: 2010-1-30 08:26
标题: Re: do to
谢谢hopewell.分类汇总的功能完全实现了。
可能我举的例子对我自己的实际问题不是太合适,我再举一个例子,再麻烦hopewell帮忙解答。
有一系列数据var:
1 23 1 5 6 8 9 10 4 5 8 9 2 5 1 4 6 37 8 6 9 2  1 7 6 3 6 8 6 9 7 85 6 3  2 1;
这系列数据,i从1到20的(do i=1 to 20 by 1),条件为0&lt;var&lt;i的各个范围的概率。
最的一输出的结果是:
i  gailv
1  ...(意思是:var在(0,1)这个范围的概率)
2  ...
………
20  gailv
作者: shiyiming    时间: 2010-1-30 11:03
标题: Re: do to
[code:10gk7m54]data a;
        input var @@;
datalines;
1 23 1 5 6 8 9 10 4 5 8 9 2 5 1 4 6 37 8 6 9 2 1 7 6 3 6 8 6 9 7 85 6 3 2 1
;

proc sql;
        create table b as
                select mod(monotonic()-1,20)+1 as i,
                                sum(ifn(0&lt;var&lt;=calculated i,1,0))/count(var) as gailv
                        from a
                        group by i;
quit;[/code:10gk7m54]
作者: shiyiming    时间: 2010-1-30 20:17
标题: Re: do to
叩谢hopewell,先研究这段程序,都没有用过这种用法。
作者: shiyiming    时间: 2010-1-30 20:22
标题: Re: do to
请问是在9.2编写的吗?我的是8.1,ifn函数提示出错。
作者: shiyiming    时间: 2010-1-30 21:28
标题: Re: do to
不确定8下能不能用,也不确定是不是你要的,试试吧
[code:222ts6nm]data a;
        input var @@;
        i=mod(_n_-1,20)+1;
        if 0&lt;var&lt;=i then condition=1;
        else condition=0;
datalines;
1 23 1 5 6 8 9 10 4 5 8 9 2 5 1 4 6 37 8 6 9 2 1 7 6 3 6 8 6 9 7 85 6 3 2 1
;

proc sql;
        create table b as
                select i,sum(condition)/count(var) as gailv
                        from a
                        group by i;
quit;[/code:222ts6nm]




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