SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1157|回复: 2
打印 上一主题 下一主题

怎么把sum值放到同一个数据集中?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2003-10-31 22:19:14 | 只看该作者

怎么把sum值放到同一个数据集中?

%macro prob;
%do j=1 %to 10;

data  aa (drop=i);
do i=1 to 47;
a=ranuni(0);
b=ranuni(0);
output;
end;

proc rank data=aa   out=aa;
   var a;
   ranks
         x
         ;
proc rank data=aa   out=aa;
   var b;
   ranks
         y
         ;
run;

data aa;
set aa;
if x>37 then  xx=1;
    else if x<11 then xx=-1;
    else xx=0;
if y>37 then  yy=1;
    else if y<11 then yy=-1;
    else yy=0;
z=xx*yy;

proc means data=aa sum;
var z;
run;


%end;
%mend prob;

%prob;

对于如上程序的结果,即10个z的sum,怎么把10个z的sum放到同一个数据集中呢,作为z-sum变量的10个观测?
先谢谢各位了!!
对于提高程序效率的改动更是欢迎!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2003-11-1 09:48:40 | 只看该作者
不用宏好像更易于处理,不知是否达到你的要求?

data aa (drop=i);
do k=1 to 10;
do i=1 to 47;
a=ranuni(0);
b=ranuni(0);
output;
end;
end;
run;

proc rank data=aa out=aa;
by k;var a; ranks x ;
proc rank data=aa out=aa;
by k;var b; ranks y ;
run;


data aa;
set aa;
if x>37 then xx=1;
else if x<11 then xx=-1;
else xx=0;
if y>37 then yy=1;
else if y<11 then yy=-1;
else yy=0;
z=xx*yy;

proc means data=aa noprint;
by k;
var z;
output out=cc(keep=z rename=(z=z_sum)) sum=;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2003-11-1 12:20:33 | 只看该作者
谢谢老兄了
真是高手啊
万分感谢!!!
我现在就是编程能力太差了
很多自己的想法都实现不
所幸的是论坛上有那么多的热心人
感动.................
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 13:43 , Processed in 0.147852 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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