楼主: fyfzhdsfdx
8453 13

sas每6个数据求均值 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
966 点
帖子
97
精华
0
在线时间
89 小时
注册时间
2012-8-22
最后登录
2016-9-24

楼主
fyfzhdsfdx 发表于 2013-5-11 20:29:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求高手!!!问题如下:
        如果想求数据集中的一个变量x的每6个观测值的均值,怎么求?
十分感谢!

二维码

扫码加我 拉你入群

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

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

关键词:观测值 数据集 求数据 求高手

本帖被以下文库推荐

沙发
Eternal0601 发表于 2013-5-11 20:43:55
data raw;
do x=1 to 30;
        output;
end;
run;

data raw2;
set raw;
group=int( (_n_ - 1)/6);
run;

proc means data=raw2 nway noprint;
class group;
var x;
output  out=final mean=;
run;

藤椅
王者归来14 发表于 2013-5-12 00:52:25
(x的移动平均值,如果是1-6,6-12,...计算平均值,则用楼上那位仁兄的方法)
data a;
set b;/*x所在的原始数据集*/
array y(6);
y1=x;
do i=2 to 6;
y(i)=lag(y(i-1));
end;
mean6=mean(of y1-y6);
drop i;
run;

板凳
yongyitian 发表于 2013-5-12 08:45:36
/* Here is an another method */

data test;
   do x = 1 to 34;
        output;
  end;
run;

data results;
  retain x_sum;
    set test;
   if mod(_n_ , 6) = 1 then x_sum = x;
      else if mod(_n_, 6) = 0 then x_mean = (x_sum+x)/6;
      else x_sum = x_sum + x;
   drop x_sum;
run;

报纸
ryuuzt 发表于 2013-5-12 09:08:56
学习了。

地板
fyfzhdsfdx 发表于 2013-5-12 09:22:05
谢谢大家的回复,不过我还得继续问问题,嘿嘿。。。如果要实现对于产生的随机数,每6个求均值mean,然后判断该mean是否大于3,若满足,则停止产生随机数,并判断共产生了多少个随机数;若不满足则继续操作。这个代码怎么实现那??
十分感谢。

7
yongyitian 发表于 2013-5-12 10:34:46
/* it depends on the maximum value of the random number generated each time */
/* be carefull when changing the value of a or b. */
/* the program may not stop if the value of a is too small or the value of b is too big */

data random6;
    j=0;
    a=4.5;    /* the maximum value of the random number generated */
    b=3;
     do until (mean6 > b);
         sum=0;
         mean6=0;
         do i = 1 to 6;
            n =j+i;
         seed = 100+j+i;
            x = ranuni(seed)*a;
                sum+x;
         mean6 = sum/6;
         output;
         end;
         j+6;
      end;
run;

8
fyfzhdsfdx 发表于 2013-5-12 11:02:44
Eternal0601 发表于 2013-5-11 20:43
data raw;
do x=1 to 30;
        output;
谢谢您的即时回复,再问一下为什么
data raw; do x=1 to 30;output;end;group=int((_n_-1)/6);run;
这个代码的结果group为缺失值??
十分感谢!

9
Eternal0601 发表于 2013-5-12 11:22:54
fyfzhdsfdx 发表于 2013-5-12 11:02
谢谢您的即时回复,再问一下为什么
data raw; do x=1 to 30;output;end;group=int((_n_-1)/6);run;
这个 ...
1.output改变了data步默认的输出数据方式,在do--end循环中没有group的出现,自然就是默认为空值;当跳出这个循环后,x就变31,再执行group这个语句,此时_n_=1,group的值就为0,由于前面output的出现,所以这条记录不会输出数据集中,如果在group这句后面加上output就可以输出了
data raw;
do x=1 to 30;
output;
end;
group=int((_n_-1)/6);
output;
run;

2._N_ is initially set to 1. Each time the DATA step loops past the DATA statement, the variable _N_ increments by 1. The value of _N_ represents the number of times the DATA step has iterated.你改的这段code过程中data步循环只有一次,所以_n_一直都为1,为了达到效果,就只能采用下面这段code
data raw2;
set raw;
group=int( (_n_ - 1)/6);
run;

10
fyfzhdsfdx 发表于 2013-5-12 12:47:47
Eternal0601 发表于 2013-5-12 11:22
1.output改变了data步默认的输出数据方式,在do--end循环中没有group的出现,自然就是默认为空值;当跳出 ...
十分感谢,

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 08:22