楼主: moshushi8928
3139 7

如何用代码作为宏参数来估计运行时间 [推广有奖]

  • 4关注
  • 1粉丝

高中生

55%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
0
学术水平
5 点
热心指数
5 点
信用等级
5 点
经验
124 点
帖子
13
精华
0
在线时间
39 小时
注册时间
2011-12-7
最后登录
2021-12-15

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教各位高手,我现在要编一个预测运行时间的宏 %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挺难,有好多细节不好处理。大家有何想法,都请发表宝贵意见,多谢多谢!
二维码

扫码加我 拉你入群

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

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

关键词:运行时间 如何用 Estimation dataset Project 如何

本帖被以下文库推荐

沙发
playmore 发表于 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;
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

藤椅
moshushi8928 发表于 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固定。我不知道能否智能的解决这个问题

使用道具

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

使用道具

报纸
moshushi8928 发表于 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删除。我现在真是束手无策,不知道你有什么好的建议没?谢谢

使用道具

地板
playmore 发表于 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之类的临时变量删掉就好了
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

7
jolterheadmmtt 发表于 2013-8-13 17:12:17 |只看作者 |坛友微信交流群
playmore 发表于 2013-6-21 09:03
这个问题好像没你想象的复杂
我大概帮你写个思路,可能有错误,你当个伪码看吧
我也跟着学习一下

可是%&Code(DataSet_Temp)  这个该怎么理解?我实在看不懂,能解释一下么?谢谢您!

使用道具

8
jolterheadmmtt 发表于 2013-8-13 17:13:27 |只看作者 |坛友微信交流群
mark

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 00:40