楼主: sinarthur
3703 9

[原创博文] 【求助】如何用sas分析1000个按时间排序数据中每60个数据的均值方差? [推广有奖]

  • 0关注
  • 0粉丝

初中生

57%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
210 点
帖子
14
精华
0
在线时间
10 小时
注册时间
2010-1-1
最后登录
2013-7-9

楼主
sinarthur 发表于 2010-7-11 18:42:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
假设有data a
  date   x1
  1       1
  2       2
  ...........
1000 1000
如何实现   新建一列变量x2  从第60个观测值开始有数据 储存的是x1的1-60个数据的均值
                     第61个观测值是x1的2-61个数据的均值,依次类推,希望各位高手帮忙。
二维码

扫码加我 拉你入群

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

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

关键词:均值方差 如何用 Data date 如何实现 如何 新建

回帖推荐

crackman 发表于3楼  查看完整内容

data crackman; do date=1 to 1000; x=date; output; end; run; proc transpose data=crackman out=a; run; %macro mean(); %do i=1 %to 941; %let j=%eval(&i.+59); s&j.=mean(of col&i.-col&j.); %end; %mend mean; data result; set a; array s s60-s1000; %mean(); keep s:; run; proc transpose data=result out=result(keep=col1); var _all_; run; data crackman; set crackman; obs=_n_; run; ...

本帖被以下文库推荐

沙发
crackman 发表于 2010-7-11 19:12:23
你去搜一下
论坛里面曾经有一些人写过这些代码

藤椅
crackman 发表于 2010-7-11 20:18:53
data crackman;
do date=1 to 1000;
x=date;
output;
end;
run;
proc transpose data=crackman out=a;
run;
%macro mean();
%do i=1 %to 941;
%let j=%eval(&i.+59);
s&j.=mean(of col&i.-col&j.);
%end;
%mend mean;
data result;
set a;
array s s60-s1000;
%mean();
keep s:;
run;
proc transpose data=result out=result(keep=col1);
var _all_;
run;
data crackman;
set crackman;
obs=_n_;
run;
data result;
set result;
obs=_n_+59;
run;
proc sql;
create table b as select crackman.date,crackman.x,result.col1 from crackman join result on crackman.obs=result.obs;
quit;


写了一个
可以实现
但是效率肯定不高
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
sinarthur 发表于 2010-7-11 20:30:52
3# crackman
还是非常感谢

报纸
flutter88 发表于 2010-7-11 20:39:43
proc means就可以啊,很简单

地板
flutter88 发表于 2010-7-11 20:41:57
搞错了,呵呵

7
flutter88 发表于 2010-7-11 23:41:58
可以使用lag函数

data aa1;
do date=1 to 1000;
x=date;
output;
end;
run;


data aa2;
set aa1;
y=lag60(x);
inc+x;
if _n_=60 then x1=inc/60;
if _n_>60 then do;
inc=inc-y;
x1=inc/60;
end;
run;
已有 2 人评分学术水平 热心指数 收起 理由
soporaeternus + 1 精彩帖子
crackman + 1 + 1 恩 不错

总评分: 学术水平 + 2  热心指数 + 1   查看全部评分

8
tracyyang 发表于 2010-7-12 06:22:41
我觉得可以加一个变量为
1
1
。。。
1 (60个)
2
2
。。。
2(60个)

然后按照group, 做各种运算。

9
soporaeternus 发表于 2010-7-12 09:53:31
1 类似的传送门:http://www.pinggu.org/bbs/viewth ... p;extra=&page=1
2 7楼的办法很妙,毕竟mean比max的算法要简单些
Let them be hard, but never unjust

10
rockfido 在职认证  发表于 2010-7-12 10:24:45
专门进来学习的。咋大家写SAS CODE都这么厉害的。我也天天在工作中写SAS CODE,但还是每次写,每次GOOGLE。。。。

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

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