楼主: lihuixin
1749 2

[有偿编程] SAS实现一列数的差 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

大专生

61%

还不是VIP/贵宾

-

威望
0
论坛币
625 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
671 点
帖子
69
精华
0
在线时间
35 小时
注册时间
2008-12-9
最后登录
2013-3-6

楼主
lihuixin 发表于 2012-12-8 03:45:15 |AI写论文
10论坛币
数据有如下三个变量 a b c, 数据格式如下
a  b  c
1  1  0.3
1  2  0.4
1  3  0.6
1  4  0.8
2  1  0.2
2  2  0.9
2  3  0.5
2  4  0.6
3  1  0.5
3  2  0.6
3  3  0.1
3  4  0.5
...
b 是一直重复1 2 3 4 , a从1 到200, c 是要比较的数。
我想创建新的变量 d,如果b=1, d=c, 如果b=2,3,4, d=c的当前值减去前一个数值
最后结果应该是
a   b   c  d
1  1  0.3  0.3
1  2  0.4  0.1
1  3  0.6  0.2
1  4  0.8  0.2
2  1  0.2 0.2
2  2  0.9  0.7
2  3  0.5 -0.4
2  4  0.6 0.1
3  1  0.5  0.5
3  2  0.6  0.1
3  3  0.1  -0.5
3  4  0.5 0.4
...
怎么用SAS实现这个功能呢?
请高手帮忙! 谢谢!

最佳答案

Milliaamy 查看完整内容

data one; input a b c; datalines; 1 1 0.3 1 2 0.4 1 3 0.6 1 4 0.8 2 1 0.2 2 2 0.9 2 3 0.5 2 4 0.6 3 1 0.5 3 2 0.6 3 3 0.1 3 4 0.5 run; data two; set one; d=c-lag(c); if b=1 then d=c; run;
关键词:数据格式

沙发
Milliaamy 发表于 2012-12-8 03:45:16
data one;
        input a b c;
        datalines;
1  1  0.3
1  2  0.4
1  3  0.6
1  4  0.8
2  1  0.2
2  2  0.9
2  3  0.5
2  4  0.6
3  1  0.5
3  2  0.6
3  3  0.1
3  4  0.5
run;

data two; set one;
        d=c-lag(c);
        if b=1 then d=c;
run;
生命在于折腾

藤椅
a6566792 在职认证  发表于 2012-12-11 14:58:00
there 'd=c-lag(c)' is the same as' d=dif(c)';

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-5 05:19