楼主: limuqi
2521 11

前n个 关测量相加 [推广有奖]

  • 1关注
  • 2粉丝

本科生

27%

还不是VIP/贵宾

-

威望
0
论坛币
464 个
通用积分
0.0600
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
838 点
帖子
57
精华
0
在线时间
54 小时
注册时间
2011-8-2
最后登录
2016-1-5

楼主
limuqi 发表于 2012-4-13 02:27:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. data temp;
  2. input group x;
  3. cards;
  4. 1 23
  5. 1 34
  6. 1 2
  7. 1 45
  8. 2 78
  9. 2 92
  10. 2 45
  11. 2 89
  12. 2 34
  13. 2 76
  14. 3 31
  15. 4 23
  16. 4 12
  17. ;
  18. run;
复制代码
我想增加一个变量 sum, sum是x 的前三个元素相加.
我的想法是
  1. data temp;
  2. set temp;;
  3. sum=sum(lag1(x),lag2(x),lag3(x));
  4. run;
复制代码

但是我的数据量如果很大,前100个元素相加.那我代码中不是要打 100个 "lag(x)",
想请教有没有什么简单的方法可以完成,
谢谢


二维码

扫码加我 拉你入群

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

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

关键词:cards Input Group Temp Data 测量

回帖推荐

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

You can load the data into a temporary array and sum it from there. It is super fast. See the log below. 284 %let obs=2000000; 285 data t1; 286 do dates=1 to &obs; 287 price+1; 288 output ; 289 end; 290 run; NOTE: The data set WORK.T1 has 2000000 observations and 2 variables. NOTE: DATA statement used (Total process time): real time ...

本帖被以下文库推荐

沙发
yunqingwang 在职认证  发表于 2012-4-13 09:09:58
用excel处理比较方便

藤椅
456852 发表于 2012-4-13 09:40:43
proc expand, proc sql, proc summary
暂时就想到这三种方法

板凳
freerunning_sky 在职认证  发表于 2012-4-13 10:25:49
是每一个group的前3个变量相加吗?

报纸
6203479170 发表于 2012-4-13 10:35:32

%macro lag(num=);
data cal;
set temp;
if _n_=1 then sum=0;
%do i= 1 %to #
lag&i.=lag&i.(x);
sum=sum(sum,lag&i.);
%end;
keep sum x;
run;
%mend;


%lag(num=100);

地板
bobguy 发表于 2012-4-13 10:53:44
You can load the data into a temporary array and sum it from there. It is super fast.  See the log below.

284  %let obs=2000000;
285  data t1;
286     do dates=1 to &obs;
287        price+1;
288            output ;
289          end;
290  run;

NOTE: The data set WORK.T1 has 2000000 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.19 seconds
      cpu time            0.18 seconds


291
292  %macro dosum(ph,n);
293     sum(
294      %do i=1 %to &n-1;
295         ph[_n_-&i],
296      %end;
297         ph[_n_-&n]
298         )
299  %mend;
300
301  option mprint;
302
303  data t2;
304     set t1 ;
305     array ph(&obs) _temporary_;
306     ph[_n_]=price;
307
308     if _n_>100 then sump=%dosum(ph,100);
MPRINT(DOSUM):  sum( ph[_n_-1], ph[_n_-2], ph[_n_-3], ph[_n_-4], ph[_n_-5], ph[_n_-6],
ph[_n_-7], ph[_n_-8], ph[_n_-9], ph[_n_-10], ph[_n_-11], ph[_n_-12], ph[_n_-13], ph[_n_-14],
ph[_n_-15], ph[_n_-16], ph[_n_-17], ph[_n_-18], ph[_n_-19], ph[_n_-20], ph[_n_-21], ph[_n_-22],
ph[_n_-23], ph[_n_-24], ph[_n_-25], ph[_n_-26], ph[_n_-27], ph[_n_-28], ph[_n_-29], ph[_n_-30],
ph[_n_-31], ph[_n_-32], ph[_n_-33], ph[_n_-34], ph[_n_-35], ph[_n_-36], ph[_n_-37], ph[_n_-38],
ph[_n_-39], ph[_n_-40], ph[_n_-41], ph[_n_-42], ph[_n_-43], ph[_n_-44], ph[_n_-45], ph[_n_-46],
ph[_n_-47], ph[_n_-48], ph[_n_-49], ph[_n_-50], ph[_n_-51], ph[_n_-52], ph[_n_-53], ph[_n_-54],
ph[_n_-55], ph[_n_-56], ph[_n_-57], ph[_n_-58], ph[_n_-59], ph[_n_-60], ph[_n_-61], ph[_n_-62],
ph[_n_-63], ph[_n_-64], ph[_n_-65], ph[_n_-66], ph[_n_-67], ph[_n_-68], ph[_n_-69], ph[_n_-70],
ph[_n_-71], ph[_n_-72], ph[_n_-73], ph[_n_-74], ph[_n_-75], ph[_n_-76], ph[_n_-77], ph[_n_-78],
ph[_n_-79], ph[_n_-80], ph[_n_-81], ph[_n_-82], ph[_n_-83], ph[_n_-84], ph[_n_-85], ph[_n_-86],
ph[_n_-87], ph[_n_-88], ph[_n_-89], ph[_n_-90], ph[_n_-91], ph[_n_-92], ph[_n_-93], ph[_n_-94],
ph[_n_-95], ph[_n_-96], ph[_n_-97], ph[_n_-98], ph[_n_-99], ph[_n_-100] )
309
310      keep dates price sump;
311  run;

NOTE: There were 2000000 observations read from the data set WORK.T1.
NOTE: The data set WORK.T2 has 2000000 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           2.49 seconds
      cpu time            2.49 seconds
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

7
Bugjay 发表于 2012-4-13 12:08:27
宏可以解决,楼上正解

8
limuqi 发表于 2012-4-14 02:31:01
freerunning_sky 发表于 2012-4-13 10:25
是每一个group的前3个变量相加吗?
不是,这个和group没关系,忘记删掉group变量了,不好意思

9
jingju11 发表于 2012-4-14 06:42:19
limuqi 发表于 2012-4-14 02:31
不是,这个和group没关系,忘记删掉group变量了,不好意思
这个问题并不难,请参考:
http://blog.sina.com.cn/s/blog_a3a9263601011ush.html

10
yanziwoaini 发表于 2012-4-16 23:07:10

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

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