全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1747 5
2013-02-02
求助各位:
假如数据集a:
code   var1     var2
1           5             100
2           6            120
3           4.5        90
4         4.5             90
。。。。
101      10            250
102      9             180

。。。。
201     13          300
202      14       279
。。。
需要把1-100的数据中第一个观测中var2值以5作为基准,就是让第一个观测中Var2=5;
101-200的数据中第一个观测中的var2值以10作为基准,就是让第一个观测中Var2=10;
201-300的数据中第一个观测中的var2值以13作为基准,就是让第一个观测中Var2=13;
求sas代码,非常感谢。

二维码

扫码加我 拉你入群

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

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

全部回复
2013-2-2 19:44:00
没太看懂要求,根据自己的理解,你需要的是:
复制代码
二维码

扫码加我 拉你入群

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

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

2013-2-2 20:07:12
zhangzachary 发表于 2013-2-2 19:44
没太看懂要求,根据自己的理解,你需要的是:
就是想对1-100个数据用var2/(var2的第一个观测)*(var1的第一个观测)
对101-200个数据用var2/(var2的第101个观测)*(var1的第101个观测)
对201-300个数据用var2/(var2的第201个观测)*(var1的第201个观测)
。。。
对(n*100+1)-(n*100+100)个数据用var2/(var2的第n*100+1个观测)*(var1的第n*100+1个观测)
求助循环代码
二维码

扫码加我 拉你入群

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

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

2013-2-2 20:14:52
楼主试一下下面代码。
data final;

  set a;
retain multi;
  if mod(code,100)=1 then multi=var1/var2;
var2=var2*multi;

run;
二维码

扫码加我 拉你入群

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

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

2013-2-2 20:28:26
pobel 发表于 2013-2-2 20:14
楼主试一下下面代码。
data final;
谢谢,可能我没表达清楚吧。
就是把每n个数据中(这n对每个系列可能不等,比如第一组可能是100个数据,第二组可能是140个数据,第3组可能是105个数据,等等)然后每一组的数据中所有的Var2变量都以该组第一个观测为基准,把Var2变量变成var2/(var2在该组中的第一个观测)*(var1在该组中的第一个观测)
code   var1     var2                     变化后          code var1  var2
1           5             100                                  1      5      5
2           6            120                                   2      6      6
3           4.5        90                                      3      4.5    4.5
4         4.5             90                                   4       4.5   4.5
。。。。                                                     .......
101      10            250                                  101    10   10
102      9             180                                  102      9    7.2

。。。。                                                    .....
201     13          300                                   201      13    13
202      14       279                                     202     14    12.09
。。。                                                     .....
二维码

扫码加我 拉你入群

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

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

2013-3-31 16:07:54
你的表达是有些问题···不过我明白了,试试下面的程序,自己写drop和rename吧,呵呵
data have;
input code $ var1 var2;
code=substr(code,1,2);
cards;
001 5 100
002 6 120
003 4.5 90
004 4.5 90
101 10 250
102 9 180
201 13 300
202 14 279
203 16 308
;
proc sort data=have;
by code;
run;
data want;
set have;
by code;
retain v1 v2;
if first.code then do;
  v1=var1;
  v2=var2;
end;
var22=var2/v2*v1;
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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