楼主: 布莱特
10400 10

求助关于一个变量累计求和的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:94份资源

大专生

53%

还不是VIP/贵宾

-

威望
0
论坛币
972 个
通用积分
0.1200
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
452 点
帖子
69
精华
0
在线时间
0 小时
注册时间
2007-10-12
最后登录
2016-9-22

楼主
布莱特 发表于 2007-10-30 10:51:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

如:

NoX
16360
26362
36380
46387
56401
66402
76354
86372
96400
106360

现在要求变量y,y1=x1,y2=x1+x2,y3=x1+x2+x3,依次类推,怎么完成呢?

各位大侠帮帮忙吧!

二维码

扫码加我 拉你入群

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

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

关键词:各位大侠 变量 求和

回帖推荐

harlon1976 发表于7楼  查看完整内容

其实很简单,使用累加语句轻松完成,程序如下;data a;input no x;y+x;cards;1 6360 2 6362 3 6380 4 6387 5 6401 6 6402 7 6354 8 6372 9 6400 10 6360 proc print;run;结果为:                                    Obs    no&nb ...

rain958 发表于6楼  查看完整内容

其实是你把问题说的复杂啦,你要求的简单来说就是 y1=0 y2=x1+y1y3=x2+y2.....data aa;set aa;z=lag(x);if No=1 then y=0;               else y+z;drop z; run;ps:我对你工作挺好奇的,跟我做的好像,^_^。

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

刚试了下,lag+retain,用 a=lag(a) 是行不通的因为lag(x)指定是上一阶段的原始值。。。另写如下data aa ; input No X ; datalines ;1 6360 2 6362 3 6380 4 6387 5 6401 6 6402 7 6354 8 6372 9 6400 10 6360 ;run ;data ab ; set aa ; array arr(9) ; arr(1)=lag(x) ; do i = 2 to 9 ;  arr(i)=lag(arr(i-1)) ; end ; sum=0 ; do i = 1 to 9 ;  if arr(i)=. ...

本帖被以下文库推荐

沙发
kofsphere 发表于 2007-10-31 02:33:00

刚试了下,lag+retain,用 a=lag(a) 是行不通的

因为lag(x)指定是上一阶段的原始值。。。

另写如下

data aa ;
 input No X ;
 datalines ;
1 6360
2 6362
3 6380
4 6387
5 6401
6 6402
7 6354
8 6372
9 6400
10 6360
;
run ;
data ab ;
 set aa ;
 array arr(9) ;
 arr(1)=lag(x) ;
 do i = 2 to 9 ;
  arr(i)=lag(arr(i-1)) ;
 end ;
 sum=0 ;
 do i = 1 to 9 ;
  if arr(i)=. then arr(i)=0 ;
  sum=sum + arr(i) ;
 end ;
 keep no x sum ;
run ;


现在答问还加分么?

ps: 现在放书的人都红眼了,动辄就要好几十现金。。之前刚花了一大笔钱(真钞!)买的书,结果跟着就在论坛上找到pdf的了,考

[此贴子已经被作者于2007-10-31 2:44:20编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

藤椅
布莱特 发表于 2007-10-31 09:24:00

滞后了一个,出现y1=0 y2=x1 y3=x1+x2;但不是大问题。但我要运算的数据量很大,这样循环恐怕很慢才算出来。

不过不知道有没有更简单的,sas这方面的功能这么差?用excel采用一个绝对引用,一下就算出来。就是太麻烦又得导出来。

板凳
kofsphere 发表于 2007-10-31 10:02:00

的确是很消耗资源,10w行的话,就要运行100w次赋值,加上100w次相加,(我猜的,呵呵)

我很想知道如果10w行楼主的电脑多久可以运行结束,(我想应该不会太久吧)我也期待更好的算法!

ps: 绝对引用是什么意思?(框住cells往下拉?),但是如果是指vba的话,我不认为10w行的情况下可以比sas快多少。(就假设完全脱离cells,excel在vba环境下可以容纳超过65532行)。。楼上勾起了我以前用那玩意儿的噩梦。。。

[此贴子已经被作者于2007-10-31 10:06:45编辑过]

报纸
布莱特 发表于 2007-10-31 13:51:00

是下拉excel;只要使用sum函数的时候,在里面行或列前面$加个符号就可以了,然后下拉。

10w肯定运行不了,等于运行10W的10w次。

[此贴子已经被作者于2007-10-31 13:56:35编辑过]

地板
rain958 发表于 2007-10-31 16:14:00
其实是你把问题说的复杂啦,你要求的简单来说就是
y1=0
y2=x1+y1
y3=x2+y2
.....
data aa;
set aa;
z=lag(x);
if No=1 then y=0;
               else y+z;
drop z;
run;


ps:我对你工作挺好奇的,跟我做的好像,^_^。
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

7
harlon1976 发表于 2007-10-31 21:00:00

其实很简单,使用累加语句轻松完成,程序如下;

data a;
input no x;
y+x;
cards;
1 6360
2 6362
3 6380
4 6387
5 6401
6 6402
7 6354
8 6372
9 6400
10 6360
proc print;run;

结果为:

                                    Obs    no     x       y

                                     1     1    6360     6360
                                     2     2    6362    12722
                                     3     3    6380    19102
                                     4     4    6387    25489
                                     5     5    6401    31890
                                     6     6    6402    38292
                                     7     7    6354    44646
                                     8     8    6372    51018
                                     9     9    6400    57418
                                    10    10    6360    63778

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

8
布莱特 发表于 2007-10-31 22:03:00

哎,真是挺简单的,看来的好好研究base sas;谢谢楼上各位。

rain958,哈哈,满足你的好奇!给你发了封邮件。

[此贴子已经被作者于2007-10-31 22:55:43编辑过]

9
168lijijie 发表于 2015-8-4 15:57:54
今天我也遇到了这个问题,看了大家的回复,我这里也有个解决方法,感觉还可以,可以供大家参考一下,共同学习哈
data a;
        input No        X;
        output;
        cards;
1        6360
2        6362
3        6380
4        6387
5        6401
6        6402
7        6354
8        6372
9        6400
10        6360
        ;
run;

data a1;
        set a;
        retain SUM;
        if _n_=1 then SUM=X;
        else SUM=SUM+X;
run;

proc print data=a1;
run;
结果如下:
                             The SAS System         11:33 Tuesday, August 4, 2015   1

                                    Obs    No      X      SUM

                                      1     1    6360     6360
                                      2     2    6362    12722
                                      3     3    6380    19102
                                      4     4    6387    25489
                                      5     5    6401    31890
                                      6     6    6402    38292
                                      7     7    6354    44646
                                      8     8    6372    51018
                                      9     9    6400    57418
                                     10    10    6360    63778

10
lzuds 发表于 2015-11-20 12:15:20
为什么一个简单的问题搞的这么 复杂呢?SAS中就没有相应简单的求和code吗

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

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