楼主: zl45556264
11903 6

【求教】关于lag函数的用法…… [推广有奖]

  • 1关注
  • 0粉丝

初中生

57%

还不是VIP/贵宾

-

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

楼主
zl45556264 发表于 2012-3-30 14:00:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data stockindex;  set stockindex;    la0=_col4; la1=lag1(_col4); la2=lag2(_col4); la3=lag3(_col4); la4=lag4(_col4); la5=lag5(_col4);    la6=lag6(_col4); la7=lag7(_col4); la8=lag8(_col4); la9=lag9(_col4);     if _n_>=10 then avg=sum(_col4,la1,la2,la3,la4,la5,la6,la7,la8,la9)/n(_col4,la1,la2,la3,la4,la5,la6,la7,la8,la9);    keep _col0 _col4 avg;
run;
      这是论坛里一个高人给的移动平均的解答,但如果我想求的平均至是前100个或者更多观测的话,这样列出来就麻烦了。能不能用数组或者什么办法修改一下,不用一个一个地列呢?不知道各位大侠有没有办法啊,多谢了……

二维码

扫码加我 拉你入群

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

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

关键词:lag kindex Index Stock kind 论坛 移动

沙发
bobguy 发表于 2012-3-31 08:24:13
If you don't like lag functions, a simple solution would be to load data into and temporary and to calculate with array index.

%let n=20;
data t1;
   do dates=1 to &n;
      price+1;
          output ;
        end;
run;

data t2;
   set t1 ;
   array ph(&n) _temporary_;
   ph[_n_]=price;
   put ph[_n_];
   sump=.;
   if _n_>10 then do;   
     do i=_n_ to _n_-10+1 by -1;
           sump=sum(sump,ph[i]);
         end;
         pmv=sump/10;
    end;
        keep dates price pmv;
run;

proc print;run;

藤椅
sunset1986 发表于 2012-3-31 09:38:54
array a[100] b1-b&p.;
        a[1]=lag(balance);
        do i=2 to 100;
                a=lag(a[i-1]);
        end;

这样可以实现100个lag,然后mean100=mean(of b1-b100);
已有 1 人评分学术水平 热心指数 收起 理由
denver + 5 + 5 学习了

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

An honest tale speeds best being plainly told.
Cheers!

板凳
zl45556264 发表于 2012-4-7 14:11:57
sunset1986 发表于 2012-3-31 09:38
array a[100] b1-b&p.;
        a[1]=lag(balance);
        do i=2 to 100;
多谢高人……

报纸
zl45556264 发表于 2012-4-7 14:12:34
bobguy 发表于 2012-3-31 08:24
If you don't like lag functions, a simple solution would be to load data into and temporary and to  ...
都好高深对于我来说,不过必须得感谢的……

地板
可~乐 发表于 2012-4-7 23:21:04
%macro ma(x); /*计算x天的移动平均线,例如x=5,就是计算5天的移动平均线*/
   ma&x=0; /*初始变量ma5=0*/
   array l&x.ags(&x);  /*申明一个数组,数组名字为l5ags*/
   l&x.ags(1)=close; /*close为收盘价*/
   ma&x=ma&x+l&x.ags(1);
   do i&x=2 to &x;
   l&x.ags(i&x)=lag(l&x.ags(i&x-1));
   ma&x=ma&x+l&x.ags(i&x);
   end;
   ma&x=ma&x/%eval_r(&x);
   drop i&x l&x.ags1-l&x.ags&x; /*将不必要的变量舍去*/
%mend;

7
freerunning_sky 在职认证  发表于 2012-4-8 00:14:28
  1. %let N=100;/*滑动平均个数*/
  2. proc sql;
  3.    create table output as
  4.     select distinct a2.n, a2.tmp, mean(a1.tmp) as mean_tmp
  5.         from   
  6.           (select monotonic() as n, * from  input ) as a1
  7.             inner join
  8.           (select monotonic() as n, * from  input ) as a2
  9.            on  a1.n>=a2.n & a1.n<=a2.n+&N-1
  10.         group by a2.n;
  11. quit;
复制代码

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

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