全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1551 5
2012-09-20
悬赏 40 个论坛币 未解决
我编辑了一段宏循环:(中间代码省略了)
%macro mypaid(time=,data1=,data2=);
。。。。。。
%mend;                                                                                                                                                                                                                                                   
  %mypaid(time="2010Q4",data1=ht.wj_10Q4,data2=ht.yj_10Q4) ;

日期是从 07Q1 到10Q4的季度时点,,相应的宏可能调用调用数据集我也生成了。。。
我现在跑一次会生成一个我要的结果,但是下次就又要 修改一次%mypad 时间点的参数,次数太多太麻烦

请高手如何用一个循环解决  我一次次重复 修改 参数的问题?
我想到的方法是把需要修改的的参数做成一个专门的数据集,比如
data a;
input  time $  wj $  yj $ ;cards;
10Q4  ht.wj_10Q4  ht.yj_10Q4  
10Q3  ht.wj_10Q3  ht.yj_10Q3  
.......
07Q1  ht.wj_07Q1  ht.yj_07Q1  
;
run;
然后通过一个循环调用出来放进%mypaid,但是不懂如何编程用循环调用数据集~

或者有高手能通过别的方法实现这个循环也可以,
请高手赐教!
二维码

扫码加我 拉你入群

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

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

全部回复
2012-9-20 09:32:41
call execute 实现数据步与宏的交互;
data _null_;
set a;
call execute(compress('%mypaid(time='||time||',data1='||wj||',data2='||yj||')'));
run;

不过下面数据集a有问题
$默认8个字符长度, 下面数据长度超过8,数据会截断,改一下长度。


二维码

扫码加我 拉你入群

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

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

2012-9-20 12:42:15
复制代码
二维码

扫码加我 拉你入群

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

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

2013-1-17 16:50:23
学习
二维码

扫码加我 拉你入群

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

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

2013-1-26 20:37:38
个人认为还是 call execute 比较好。我比较喜欢用cats,不用写那些||了 呵呵~
二维码

扫码加我 拉你入群

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

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

2013-1-26 23:43:04
data a;
input  time $  wj $  yj $ ;cards;
10Q4  ht.wj_10Q4  ht.yj_10Q4  
10Q3  ht.wj_10Q3  ht.yj_10Q3  
.......
07Q1  ht.wj_07Q1  ht.yj_07Q1  
;
run;

data a2;
  set a;
  num=_n_;
run;

if max num is n then

%global par1 par2 par3;
%let par1=;
%let par2=;
%let par3=;

%macro get_par(count=);
proc sql;
  select time, wj,  yj into :par1, :par2, :par3
  from a2
  where num=&count;
quit;
%mend;

%macro rerun(total=);
  %do i=1 % to $total;
  %get_par(count=&i);
  %mypaid(time=&par1;,data1=&par2,data2=&par3) ;
%end;
%Mend;

%re_run(total=n);
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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