全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3062 4
2012-01-26
悬赏 30 个论坛币 已解决
需求:假设有变量x,前4项观测已知,例如分别为2,5,9,10.从第5项开始,我希望令x=lag4(x)*(1+y),y是某已知变量。但是,使用lag是行不通的,因为:

1,首先对x的前4项赋值需要if函数,而if函数的使用会打破lag的序列;
2,其次由于x是其“本身”前4阶的值的函数,使用lag也会出现问题。

现在比较确定是使用retain语句,但是retain只能保留一阶的滞后值,如何让其保留4阶?

需求比较简单,但让小弟已经抓狂了,大大们快出场吧!

最佳答案

maidenhan 查看完整内容

I wish the following code could help u. data test01; input x @@; y = ceil(abs(10*rannor(0))); cards; 2 5 9 10 11 13 24 31 10 ;run; data test02(keep = x y t); retain x1-x4; set test01; if _n_
二维码

扫码加我 拉你入群

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

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

全部回复
2012-1-26 22:06:08
I wish the following code could help u.

data test01;
        input x @@;
        y = ceil(abs(10*rannor(0)));
cards;
2 5 9 10 11 13 24 31 10
;run;
data test02(keep = x y t);
        retain x1-x4;
        set test01;
        if _n_ <= 4 then do;
                select (mod(_n_,4));
                        when (1) x1 = x;
                        when (2) x2 = x;
                        when (3) x3 = x;
                        otherwise x4 = x;
                end;
        end;else do;
                select (mod(_n_,4));
                        when (1) do;t = x; x = x1*(1+y); x1 = t; end;
                        when (2) do;t = x; x = x2*(1+y); x2 = t; end;
                        when (3) do;t = x; x = x3*(1+y); x3 = t; end;
                        otherwise do;t = x; x = x4*(1+y); x4 = t; end;
                end;
        end;
run;
二维码

扫码加我 拉你入群

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

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

2012-1-26 22:47:22
应该详细描述一下你的问题。我感觉第一个x不是第二个x,为什么要用同样的名字呢?京剧
二维码

扫码加我 拉你入群

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

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

2012-1-26 23:10:45
maidenhan 发表于 2012-1-26 22:54
I wish the following code could help u.

data test01;
wow. amazing code!

JingJu
二维码

扫码加我 拉你入群

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

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

2012-1-27 14:47:28
谢谢maidenhan!
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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