找回密码
 注册
查看: 3131|回复: 0

跟版主crackman读SAS程序(11)

[复制链接]
发表于 2010-8-27 16:13:28 | 显示全部楼层 |阅读模式


寻找最大值
这个问题很常见 也很简单。这里主要看看高手bobugy的SQL程序和hopewell的DATA步的程序
第一个SQL
data t1;
   do i=1 to 10;
     g=ceil((3*ranuni(1)));
     x=round((10*ranuni(1)));
     output;
    end;
run;

proc print; run;

proc sql;
   select *, max(x) as max_x
   from t1
   group by g
   order by 2,1
   ;
   quit;
这个SQL很简单,但是很简洁,值得学习的就是order by 里面的 2, 1
其实这个等价于 order by x,i;
例外用了MAX函数,要学会在SQL里面使用函数,不仅仅是MAX其他函数都可以。

看看hopewell的程序:
data raw;
        input group value;
datalines;
1 3
1 5
1 8
2 1
2 5
3 3
3 5
3 1
4 5
4 12
4 8
;
data out;
        do _n_=1 by 1 until(last.group);
                set raw;
                by group;
                max=max(value,max);
        end;
        do _n_=1 to _n_;
                set raw;
                output;
        end;
run;

这个DATA步如果对于大量数据来说,效果应该是由于SQL语句的
在DATA步里面,实际上实现的是迭代,MAX为迭代变量。具体DO 循环改变DATA步运行程序对读入数据的比较可以看看跟crackman读SAS程序其他系列,说的很清楚。
后面的DO _N_=1 TO _N_;的循环等价 DATA OUT;SET RAW;



回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-12-4 00:54 , Processed in 0.020203 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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