全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1903 7
2014-11-13
最近有一个关于怎样构建数列的问题。
比如最普遍的就是 fibonacci 数列
data fibo;
do i = 1 to 10;
    fib = sum(fib, lag(fib));
    if i eq 1 then fib = 1;
    output;
    end;
run;
proc print data=fibo;
run;
我的问题就是如果我的数列是基于某几个预定值的话,比如我的数据是data new;
input x;
datalines;
1
3
7
;
我想要得到的第四个数据是
y = 0.5*lag(x)+0.3*lag2(x)+0.2*lag3(x),
以此类推。这个问题的难点是从第四个x开始已经是空值了,所以也就是借用了前三个x的值,生成第四个x也就是第一个y值,然后第二个y值应该是由第一个y值,加上第三个x值,以及第二个x值来得到,以此类推,也就是用y值来得到y值本身
所以我期待得到的数列是
y
1
3
7
3.5+0.9+0.2=4.6
2.3+2.1+0.6=5
2.5+1.38+1.4=5.28



希望得到大家的帮助,谢谢

二维码

扫码加我 拉你入群

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

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

全部回复
2014-11-14 00:27:53
复制代码
二维码

扫码加我 拉你入群

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

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

2014-11-14 02:43:58
十分感谢,我一直想着从纵向来解决这个问题,原来从横向就可以解决!
二维码

扫码加我 拉你入群

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

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

2014-11-15 00:53:32
It can be simple as below.

%let n=10;

data tmp;
array x(&n) _temporary_ (1,3,7);
do i=1 to &n;
   if i<=3 then ;
   else x[i] = 0.5*x[i-1]+0.3*x[i-2]+0.2*x[i-3];
   y=x[i];
   output;
end;
run;

proc print;run;
二维码

扫码加我 拉你入群

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

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

2014-11-15 02:52:08
bobguy 发表于 2014-11-15 00:53
It can be simple as below.

%let n=10;
不好意思,我领会错你的意思了,我再次运行一次以后出来想要的结果了。
The SAS System


i y
1 1.0000
2 3.0000
3 7.0000
4 4.6000
5 5.0000
6 5.2800
7 5.0600
8 5.1140
9 5.1310
10 5.1117

十分感谢!!!
但是,我还有一个问题,就是array的时候,你已经定义了前三个数字是1,3,7,但是如果碰到需要调用的情况,应该怎么办呢?因为前三个数字也许是2,4,8,也可能是3,5,9,有其他的方法吗?再次感谢
二维码

扫码加我 拉你入群

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

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

2014-11-15 02:56:28
bobguy 发表于 2014-11-15 00:53
It can be simple as below.

%let n=10;
不好意思,我领会错你的意思了,我再次运行一次以后出来想要的结果了。
The SAS System


i y
1 1.0000
2 3.0000
3 7.0000
4 4.6000
5 5.0000
6 5.2800
7 5.0600
8 5.1140
9 5.1310
10 5.1117

十分感谢!!!
但是,我还有一个问题,就是array的时候,你已经定义了前三个数字是1,3,7,但是如果碰到需要调用的情况,应该怎么办呢?因为前三个数字也许是2,4,8,也可能是3,5,9,有其他的方法吗?再次感谢
二维码

扫码加我 拉你入群

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

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

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

分享

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