SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 942|回复: 7
打印 上一主题 下一主题

如何得到这样的结果

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-5-24 19:36:03 | 只看该作者

如何得到这样的结果

一个变量,20个观测
首先要对20个观测的变量值求和
然后要得到每个观测对应的变量值在这一总和中所占的比例,存放在同一张表中
如何实现?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-5-24 21:02:04 | 只看该作者
[code:7cdf5]data tem;
do i=1 to 20;
  a=int(ranuni(12345)*10);
  output;
end;
keep a;
run;

proc sql;
create table tem as
  select a,sum(a) as sum_a,a/sum(a) as percent format=percent10.2 from tem;
quit;[/code:7cdf5]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-5-24 21:17:42 | 只看该作者
万分感谢
//bow

如果不用SQL的话有什么办法吗
多用几个步骤也行
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-5-25 09:52:31 | 只看该作者
2楼的方法不是很好吗?干吗要舍近求远,多几个步骤呢?
你不需要考虑效率问题吗?
多几个步骤,你的目的是什么呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-5-26 12:19:15 | 只看该作者
试一下一下程序:

[code:5ad76]data tem2;
do i=1 to 20;
  A=int(ranuni(12345)*10);
  output;
end;
run;

data tem2;
    if _n_=1 then do until(last);
      set tem2(keep=a) end=last;
      Sum_a+a;
    end;
    set tem2;
    Percent=A/Sum_a;
    format percent percent10.2;
run;[/code:5ad76]

若数据中不含0,还可试一下以下程序:

[code:5ad76]proc freq data=tem2;
   table i/out=tem3;
   weight a;
run;[/code:5ad76]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-5-27 09:45:11 | 只看该作者
欢迎,欢迎!

我还记得【测度论】学的我头都大了, <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2004-5-27 16:27:18 | 只看该作者
Try this!

[code:84243]data tmp&#40;keep=a&#41;;
   do i=1 to 20;
      a=int&#40;ranuni&#40;0&#41;*10&#41;;
      output;
   end;
run;

proc means data=tmp noprint;
   var a;
   output out=asum&#40;keep=total&#41;  sum=total;
run;

data tmp;
   set tmp;
   if _N_ = 1 then set asum;
   percent=a/total;
   format percent percent10&#46;2;
run;[/code:84243]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2004-5-30 13:27:10 | 只看该作者
可以用macro来做:
data tmp(keep=a);
   do i=1 to 20;
      a=int(ranuni(0)*10);
      output;
   end;
run;

proc means noprint;
var a;
output out=sum_a sum=sum_a;
run;

data _null_;
set sum_a;
call symput('sum_a',sum_a);
run;

data tmp;
set tmp;
a_pct=(a/&amp;sum_a)*100;
run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 07:53 , Processed in 0.118907 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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