全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2454 11
2012-04-13
复制代码
我想增加一个变量 sum, sum是x 的前三个元素相加.
我的想法是
复制代码

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


二维码

扫码加我 拉你入群

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

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

全部回复
2012-4-13 09:09:58
用excel处理比较方便
二维码

扫码加我 拉你入群

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

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

2012-4-13 09:40:43
proc expand, proc sql, proc summary
暂时就想到这三种方法
二维码

扫码加我 拉你入群

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

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

2012-4-13 10:25:49
是每一个group的前3个变量相加吗?
二维码

扫码加我 拉你入群

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

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

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);

二维码

扫码加我 拉你入群

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

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

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
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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