楼主: wdxmahone
6376 14

[原创博文] sas 连乘的实现 [推广有奖]

  • 0关注
  • 1粉丝

已卖:348份资源

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
12568 个
通用积分
0
学术水平
2 点
热心指数
3 点
信用等级
2 点
经验
3518 点
帖子
121
精华
0
在线时间
155 小时
注册时间
2010-1-11
最后登录
2022-9-4

楼主
wdxmahone 发表于 2011-6-28 09:58:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一个数据集a;a1 a2
1 0.2
2 0.3
3 0.5;


我想得到这样的结果;
a1 a2 a3
1 0.2 1
2 0.3 0.2  (=lag(a3)*lag(a2))
3 0.5 0.06;   (=lag(a3)*lag(a2))


我对sas如何处理行之间的变化还很不清楚。谢谢大家!
二维码

扫码加我 拉你入群

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

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

关键词:lag 数据集 如何

回帖推荐

soporaeternus 发表于2楼  查看完整内容

没用lag,觉得lag好复杂.......

本帖被以下文库推荐

沙发
soporaeternus 发表于 2011-6-28 10:41:52
  1. data b;
  2.         retain a1 a2 a3 1;
  3.         a3=a3*a2;
  4.         set a;
  5. run;
复制代码
没用lag,觉得lag好复杂.......
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
wdxmahone + 1 + 1 + 1 很有思想
liuzhenzhu + 10 + 1 + 1 热心帮助其他会员

总评分: 经验 + 3  论坛币 + 13  学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

Let them be hard, but never unjust

藤椅
honghejing 发表于 2011-6-28 11:04:30
data b;
set a;
retain a3;
a3=lag(a1)*lag(a2);
if _n_=1 then a3=a1;
run;

板凳
honghejing 发表于 2011-6-28 11:09:20
lag就是把上面一个observation的值赋给下一个observation。
举个简单的例子:
data a;
input a;
cards;
1
2
3
4
5
;
run;
data b;
set a;
a=lag(a);
run;
data c;
set a;
b=lag(a);
run;


2# soporaeternus

报纸
yugao1986 发表于 2011-6-28 11:24:32
  1. data a;
  2.    input a1 a2;
  3. datalines;
  4. 1 0.2
  5. 2 0.3
  6. 3 0.5
  7. 4 0.8
  8. 5 1.0
  9. ;
  10. data blank;
  11.    input a1 a2;
  12.    datalines;
  13.    . . .
  14.    ;
  15. proc append base=blank data=a;
  16. run;
  17. data want;
  18.    set blank;
  19.    retain a3 1;
  20.    if _n_ ^= 1 then a3=a2*a3;
  21. run;
复制代码
三人行必有我师

地板
yugao1986 发表于 2011-6-28 11:26:45
顶下,相当简洁 2# soporaeternus
三人行必有我师

7
wdxmahone 发表于 2011-6-28 12:25:53
soporaeternus 发表于 2011-6-28 10:41
  1. data b;
  2.         retain a1 a2 a3 1;
  3.         a3=a3*a2;
  4.         set a;
  5. run;
复制代码
没用lag,觉得lag好复杂.......
相当简洁,不过我又遇到新问题了,

a1 a2
1 0.2
2 0.3
3 0.5
4 0.1;
我如何实现跳跃,比如第一行的(1+0.2)*第三行的(1+0.5);第二行的(1+0.3)*第四行的(1+0.1);总之奇数行相乘,偶数行的相乘。

8
pobel 在职认证  发表于 2011-6-28 12:42:36
data test;
   input a1 a2;
   cards;
1 0.2
2 0.3
3 0.5
4 0.1
;

data test1;
    set test;
        a3=sum(1,a2)*lag2(sum(1,a2));
        if _n_<=2 then a3=sum(1,a2);
run;
和谐拯救危机

9
honghejing 发表于 2011-6-28 12:58:41
retain和lag联合使用的功能相对于单纯使用retain来说要强大的很多。

10
nectar 发表于 2011-6-29 10:00:31
这里的讨论的code很实用呀。我经常会遇到使用个股月回报求年度累计回报的情形。受用啦。

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

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