全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3876 15
2012-09-20
悬赏 30 个论坛币 已解决
我编辑了一段宏循环:(中间代码省略了)
%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,但是不懂如何用循环调用~
请高手赐教

最佳答案

pobel 查看完整内容

data a; input time $ wj : $30. yj : $30. ; code='%'||"mypaid(time="||quote(strip(time))||", data1="||strip(wj)||", data2="||strip(yj)||")"; call execute(code); cards; 10Q4 ht.wj_10Q4 ht.yj_10Q4 10Q3 ht.wj_10Q3 ht.yj_10Q3 07Q1 ht.wj_07Q1 ht.yj_07Q1 ; run;
二维码

扫码加我 拉你入群

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

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

全部回复
2012-9-20 08:57:59

data a;
input  time $  wj : $30.  yj : $30. ;
code='%'||"mypaid(time="||quote(strip(time))||", data1="||strip(wj)||", data2="||strip(yj)||")";
call execute(code);
cards;
10Q4  ht.wj_10Q4  ht.yj_10Q4  
10Q3  ht.wj_10Q3  ht.yj_10Q3  
07Q1  ht.wj_07Q1  ht.yj_07Q1  
;
run;
二维码

扫码加我 拉你入群

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

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

2012-9-21 14:49:35
试试这个吧
%macro loop(yq=11Q3,nto=9);
        %do i =1 %to &nto;
                %mypaid(time=&yq,data1=ht.wj_&yq,data2=ht.yj_&yq) ;
                %let year_tmp=%substr(&yq,1,2);
                %let qurt_tmp=%substr(&yq,4,1);

                %if &qurt_tmp=1 %then %do;
                                %let year_tmp=%eval(&year_tmp-1);
                                %let qurt_tmp=4;
                %end;
                %else %do;
                                %let qurt_tmp=%eval(&qurt_tmp-1);
                %end;
                %let yq = %sysfunc(catt(&year_tmp,Q,&qurt_tmp));
                %if %length(&yq) =3 %then %let yq=%sysfunc(catt(0,&yq));
        %end;
%mend;
%loop;
二维码

扫码加我 拉你入群

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

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

2012-9-21 18:16:35
Create another macro to call your macro:
二维码

扫码加我 拉你入群

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

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

2012-9-21 18:17:46
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 b;
        set a;
        id = _n_;
run;

%macro run_all(time=,data1=,data2=);
        proc sql;
                select count(*) into :count;
        run;

        %do i = 1 %to &count;
                proc sql;
                        select time into :time,
                                   wj into :wj,
                                   yj into :yj
                        from b
                        where id = i;
                run;
                %mypaid(&time, &wj, &yj);
        %end;
%mend;      
二维码

扫码加我 拉你入群

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

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

2012-9-21 18:19:34
Sorry, try this one.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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