全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
22806 17
2011-07-30
悬赏 50 个论坛币 未解决
各位大侠,帮小生看看吧,在这儿先谢过了~
我这儿有两个问题,比如有这样的数据,
data test ;                                                                                                                           
input m1 m2 m3;                                                                                                                        
cards;                                                                                                                                 
1.1 1.24 1.25                                                                                                                           
1.2 1.23 1.27                                                                                                                           
1.1 1.22 1.25                                                                                                                           
1.3 1.22 1.27                                                                                                                           
1.1 1.24 1.25  
1.3 1.25 1.25
1.3 1.27 1.26
1.2 1.31 1.26                                                                                                                        
;                                                                                                                                       
proc print;                                                                                                                             
run;
问题是这样的,1.如果我在后面的程序中要算m1-m1均值,m2-m2均值,m3-m3均值,应该怎么写程序呢?
2.怎样算1~3,2~4,3~5,4~6,5~7,6~8组(行)数据的m1,m2,m3的均值呢?同样的怎么算1~5,2~6,3~7,4~8组(行)数据的m1,m2,m3的均值呢?
初学SAS,找了很多书但也找不到答案,希望大家帮帮忙,谢谢啦~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-7-30 13:27:08
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-30 13:31:01
1.
复制代码
2.
此处介绍两种方法:
一、
复制代码
二、此处为便于理解,就不使用宏了
方法一:主要是把数据进行转至后,利用变量名的规律求均值
方法二:用lag函数把需要求均值的数放在一行
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-30 13:56:33
%macro d;
%do i=3 %to 8;
     data d&i;
         set test;
             if _n_<=&i and _n_>=(&i-2);
     run;
         proc means data=d&i noprint;
              var m1-m3;
                  output out=q&i mean=mean_m1 mean_m2 mean_m3;
         run;
%end;
         data avg;
            set
            %do i=3 %to 8;
                    d&i
                %end;
                ;
          run;
proc print data=avg;
run;
%mend d;
%d
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-30 14:15:46
希望是你需要的!
*算平均值;
proc sql;
select mean(m1),mean(m2),mean(m3)
from test;
quit;


*平滑均值的计算;

data test;
set test;
format sum1 sum2 sum3 8.2;
retain sum1        sum2 sum3;
sum1+m1;
sum2+m2;
sum3+m3;
run;


data test2;
merge test(keep=sum1 sum2 sum3)
      test( firstobs=4 rename=(sum1=sum1a sum2=sum2a sum3=sum3a) keep=sum1 sum2 sum3);
means1=        (sum1a-sum1) /3;
means2=        (sum2a-sum2) /3;
means3=        (sum3a-sum3) /3;
run;


*后滞平均值;
%macro test(data=,n=,var=);
data test2;
format means sum 8.2;
set &data;

means=0;
sum=0;

%do i =1 %to %eval(&n.-1);
sum=sum+lag&i(&var);
%end;

sum=sum+&var;

if _n_ >= &n.  then means=sum/&n;
else means=.;
run;
%mend;
%test(data=test,n=5,var=m3)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-30 14:45:29
那请问算出均值以后,在后面的程序可以调用吗?怎么调用呢? 5# 李金玲
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群