SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1260|回复: 3
打印 上一主题 下一主题

怎么求一列变量的最大值

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-4-17 11:13:20 | 只看该作者

怎么求一列变量的最大值

有两列数据
按升序排列
打个比方,如
obs   r1         r2
1     -0.01    -0.02
2     -0.008  -0.012
.    .      .
.    .      .
.    .      .
n      0.1       0.2  

我想求出r1的正负号分界点的那个负观测的obs值,以及r2正负值交界的那个负观测的 obs值
再比较之间的大小 ,再以小的obs为界,比较在这个obs前的r1/r2的最大值与这个obs后面r1/r2的最小值的大小
我的程序是这样的
但运用max与min函数得不到值
请那位告诉我下
谢谢
我的qq 396424213
邮箱 <!-- e --><a href="mailto:mlsh163@163.com">mlsh163@163.com</a><!-- e -->

data a;
ratio=r1/r2;

if ( r1&gt;0 and lag(r1)&lt;0) then do ;
a=obs-1;
if a=. then delete;
s=a;
put 's='s;
end;

if ( r2&gt;0 and lag(r2)&lt;0) then do;
b=obs-1;
if b=. then delete;
t=b;
put 'b=' b;
end;

if s&gt;t then goto ok;
else if s&lt;=t then do obs=1 to s;
m=MAX ratio;
end;
do obs=s to last.obs;n=min ratio;
end;
if n&gt;=m then put 'r1 dominate r2';
else put 'r1 donot dominate r2';
ok:put 'r1 donot dominate r2';
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-4-18 14:44:41 | 只看该作者

Re: 怎么求一列变量的最大值

data test;
input obs r1 r2;
cards;
1 -0.01 -0.02
2 -0.008 -0.012
3 -0.003 -0.008
4 0.01 -0.007
5 0.1 0.2
;
run;
data test1;
set test;
where r1&lt;0 and r2&lt;0;
r=r1/r2;
run;
/*````````````proc means; can provide min and max info```````````*/
proc sort data=test1;
by r;
run;
data test2;
set test1 nobs=n;
if _n_=1 then max=r;
if _n_=n  then min=r;
run;
不知道是不是要这个```````不是特别理解楼组的意思`````
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-4-18 20:23:58 | 只看该作者

Re: 怎么求一列变量的最大值

[code:3g7yqup7]
data one two;
        set a;
        r=r1/r2;
        if r1&lt;0 and r2&lt;0 then output one;
        else if r1*r2&lt;0 then output two;
run;

proc means data=one nway noprint;
        output out=maxdata(keep=max_r) max(r)=max_r;
proc means data=two nway noprint;
        output out=mindata(keep=min_r) min(r)=min_r;
run;
[/code:3g7yqup7]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-4-28 12:33:18 | 只看该作者

Re: 怎么求一列变量的最大值

data work.a;
input r1 r2;
cards;
-0.01 -0.02
-0.008 -0.012
-0.005 -0.007
0.001 -0.001
0.003 0.0001
0.004 0.02
;
run;
data work.b;
set work.a ;
obs=_n_;
run;
proc sql noprint;
select obs into :b from work.b where
r1&gt;=0 ;
select obs into :a from work.b where
r2&gt;=0;
quit;
data work.h;
a=&amp;a;
b=&amp;b;
run;
proc sql noprint;
select min(a,b) into:c from work.h;
%put &amp;c;
quit;
data work.i;
set work.b;
if obs&lt;=&amp;c then
ratio1=r1/r2;
else
ratio2=r1/r2;
run;
proc sql noprint;
create table work.k as
select max(max(ratio1),max(ratio2)) as maxratio from work.i;
quit;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 16:26 , Processed in 0.074334 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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