SAS中文论坛

标题: 如何得到这样的结果 [打印本页]

作者: shiyiming    时间: 2004-5-24 19:36
标题: 如何得到这样的结果
一个变量,20个观测
首先要对20个观测的变量值求和
然后要得到每个观测对应的变量值在这一总和中所占的比例,存放在同一张表中
如何实现?
作者: shiyiming    时间: 2004-5-24 21:02
[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]
作者: shiyiming    时间: 2004-5-24 21:17
万分感谢
//bow

如果不用SQL的话有什么办法吗
多用几个步骤也行
作者: shiyiming    时间: 2004-5-25 09:52
2楼的方法不是很好吗?干吗要舍近求远,多几个步骤呢?
你不需要考虑效率问题吗?
多几个步骤,你的目的是什么呢?
作者: shiyiming    时间: 2004-5-26 12:19
试一下一下程序:

[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]
作者: shiyiming    时间: 2004-5-27 09:45
欢迎,欢迎!

我还记得【测度论】学的我头都大了, <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
作者: shiyiming    时间: 2004-5-27 16:27
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]
作者: shiyiming    时间: 2004-5-30 13:27
可以用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;




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