全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3341 7
2013-06-21
请教各位高手,我现在要编一个预测运行时间的宏 %macro TimeEstimation(code, dataset). 宏参数dataset非常大。我们知道,dataset越大时,运行时间也就越长。现在要估计运行时间,基本方法是:取&dataset的前1000000个观测值,用&code来运行,得出运行时间t1, 然后取&dataset的前2000000个观测值,用&code来运行,得出时间t2,以此迭代类推,得到时间t10。然后用t1,t2, ...t10这十个数值为Y,对应观测值1000000, 2000000, ...10000000为X,来做一个X*logX回归,求出系数,然后利用这些求得的系数和&dataset的总观测值数,来预测整个过程的运行时间。我觉得这个project挺难,有好多细节不好处理。大家有何想法,都请发表宝贵意见,多谢多谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2013-6-21 09:03:04
这个问题好像没你想象的复杂
我大概帮你写个思路,可能有错误,你当个伪码看吧

macro TimeEstimation(Code,DataSet);

%do i=1000 %to 10000 %by 1000;

data DataSet_Temp(where=(_N_ LE &i));
set &DataSet;
run;

data TimeStamp_Temp;
ID=&i;
Beg_Time=&SYSTIME;
run;

%&Code(DataSet_Temp);

data TimeStamp_Temp;
set TimeStamp_Temp;
End_Time=&SYSTIME;
run;

%if &i EQ 1000 %then %do;
data TimeStamp;
set TimeStamp_Temp;
run;
%end;
%else %do;
proc append base=TimeStamp data=TimeStamp_Temp;
run;
%end;

%end;


mend;
二维码

扫码加我 拉你入群

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

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

2013-6-21 23:37:16
playmore 发表于 2013-6-21 09:03
这个问题好像没你想象的复杂
我大概帮你写个思路,可能有错误,你当个伪码看吧
谢谢你的指点。我觉得 %&Code(DataSet_Temp);这里才是整个project的难点,如果dataset仅仅只是&code里的变量之一,&code里可能还有宏变量SampleSize, Field等等, 那该如何解决呢?比如一个&code(dataset, SampleSize),此时我们让SampleSize固定。另一个&code(dataset,feild,output),我们要让field和output固定。我不知道能否智能的解决这个问题
二维码

扫码加我 拉你入群

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

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

2013-6-22 05:23:25
playmore 发表于 2013-6-21 09:03
这个问题好像没你想象的复杂
我大概帮你写个思路,可能有错误,你当个伪码看吧
我已经基本完成project了,多谢大牛的帮助,必须加关注啊
二维码

扫码加我 拉你入群

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

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

2013-6-25 13:29:47
playmore 发表于 2013-6-21 09:03
这个问题好像没你想象的复杂
我大概帮你写个思路,可能有错误,你当个伪码看吧
还是要向大牛请教下%&Code(DataSet_Temp)这个难点。就像我上面所说,当dataset仅仅只是&code里的变量之一时,例如我们来测验【%macro sort(dataset, field); proc sort data=&dataset; by &field; quit; %mend; %sort(abc, patid)】的时间时,我把你给的宏中的%&Code(DataSet_Temp)改成了%&Code, 代码的结尾处写成了%TimeEstimation(sort(DataSet_Temp, patid), abc)。代码能够顺利运行了,但我那奇葩的老板却说这是hard code,不方便使用. 必须要从%TimeEstimation(sort(DataSet_Temp, patid), abc)中把DataSet_Temp改成abc或者直接把DataSet_Temp删除。我现在真是束手无策,不知道你有什么好的建议没?谢谢
二维码

扫码加我 拉你入群

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

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

2013-6-25 13:39:08
moshushi8928 发表于 2013-6-25 13:29
还是要向大牛请教下%&Code(DataSet_Temp)这个难点。就像我上面所说,当dataset仅仅只是&code里的变量之一 ...
你的改法是对的,据我所知SAS的宏不支持可变数量的参数,所以只能像你做的那样
把sort(DataSet_Temp,patid)作为一个参数传进宏

另外,你老板说的也不错,中间这个DataSet_Temp是我的宏生成的临时表,为的是不修改原始表
如果想把DataSet_Temp换成abc,也可以在宏里去掉这个临时表,直接对&DataSet进行操作
但是在宏的最后把生成的ID、Beg_Time之类的临时变量删掉就好了
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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