SAS中文论坛

标题: 请教宏中如何将宏变量中的变量分开 [打印本页]

作者: shiyiming    时间: 2009-8-20 16:23
标题: 请教宏中如何将宏变量中的变量分开
如%macro list(dataa,cn,group,yvar,var);
   proc glm data=&dataa;
   class &cn &group;
model &var=&group &yvar &cn &group*&cn/nouni ss3;
repeated time/printe;
ods output sphericity=test;
ods output modelanova(MATCH_ALL)=anova;
%mend list;
调用时:
%list(fxf,cn,group,po5a00h1,p05a05h1 p05a1h1 p05a2h1 p05a4h1 p05a6h1 p05a8h1 p05a10h1 p05a12h1 p05a14h1 p05a18h1)
现在是可以进行分析,如果想把变量Var分解为p05a05h1 p05a1h1 p05a2h1 p05a4h1 p05a6h1 和p05a8h1 p05a10h1 p05a12h1 p05a14h1 p05a18h1两部分,或者想单独调用Var中的每一个变量,如p05a05h1、p05a1h1、p05a2h1等,该如何实现呢?
谢谢!
作者: shiyiming    时间: 2009-8-20 16:57
标题: Re: 请教宏中如何将宏变量中的变量分开
可以用 %scan %qscan 来拆分
如:
  %let param1=%qscan(&var,1," ");
   %let param2=%qscan(&var,2," ");

也可以用一个循环变量,分解开
如:
  %do i=1 %to 10;
    %let parma&i=%qscan(&var,i," ");
  %end;
作者: shiyiming    时间: 2009-8-20 17:00
标题: Re: 请教宏中如何将宏变量中的变量分开
非常感谢楼上的回复!
作者: shiyiming    时间: 2009-8-20 17:52
标题: Re: 请教宏中如何将宏变量中的变量分开
[code:1ag13qg2]%macro list_var /parmbuff;
        options nosymbolgen nomprint;
        %let num=1;
        %let temp=%scan(&syspbuff,&num,',()');
        %do %while(&temp ne);
                %if &num=1 %then %let dataa=&temp;
                %else %if &num=2 %then %let cn=&temp;
                %else %if &num=3 %then %let group=&temp;
                %else %if &num=4 %then %let yvar=&temp;
                %else %let var=&temp;

                /* proc glm */
                /*%if &num>4 %then %do;
                        proc glm data=&dataa;
                                class &cn &group;
                                model &var=&group &yvar &cn &group*&cn/nouni ss3;
                                repeated time/printe;
                                ods output sphericity=test;
                                ods output modelanova(MATCH_ALL)=anova;
                        run;
                %end;*/

                /* temp debug begin */
                %if &num=4 %then %do; /* temp put */
                                %put NOTE: BEGIN ***;
                                %put NOTE: *** DATA: &dataa CN: &cn GROUP: &group YVAR: &yvar ***;       
                        %end;
                %else %if &num>4 %then %put NOTE: *** 第%eval(&num.-4)个VAR为:&temp ***;
                /* temp debug end */

                %let num=%eval(&num+1);
                %let temp=%scan(&syspbuff,&num,',()');
        %end;
        %put NOTE: END ***;        /* temp debug */
%mend;

%list_var(fxf,cn,group,po5a00h1,p05a05h1 p05a1h1 p05a2h1 p05a4h1 p05a6h1 p05a8h1 p05a10h1 p05a12h1 p05a14h1 p05a18h1)
%list_var(fxf,cn,group,po5a00h1,p05a05h1 p05a1h1 p05a2h1 p05a4h1 p05a6h1,p05a8h1 p05a10h1 p05a12h1 p05a14h1 p05a18h1)
%list_var(fxf,cn,group,po5a00h1,p05a05h1,p05a1h1,p05a2h1)[/code:1ag13qg2]




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2