我正试图制作一些情节。我需要制作19个散点图,将verf_typ_nmes中的名称替换为数据,然后逐步执行一个步骤然后执行。我研究了谷歌,并认为我正确复制但没有好处。
我得到的错误: “在%DO声明中未找到预期%TO” 错误:将编译虚拟宏。
%macro Multiplot();
%do verf_typ_nmes = BDPREP, BRCODE, CONTNT, COPAL, CURSRY,
DFTEST,DOCPST,DSMS,LABEL,MAILING,
MAILPC,MERLIN,MMS,MPCV,PRESRT,PVDS,
SHPAID,TAP,WEIGHT;
data &verf_typ_nmes;
set vol_verfns_prime;
where verif_type="&verf_typ_nmes";
RUN;
proc sgscatter data=&verf_typ_nmes;
plot verif_pstg*(t_v tfev mlgs fsp avpm);
run;
%end;
%mend;
答案 0 :(得分:2)
%DO
语句没有DO
语句那么强大。
为什么不使用BY
声明?
proc sgscatter data=vol_verfns_prime;
by verif_type ;
where verif_type in ('BDPREP' 'BRCODE' ..... );
plot verif_pstg*(t_v tfev mlgs fsp avpm);
run;
如果确实需要遍历名称列表,则将列表放在宏变量中,并使用%scan()
逐个提取值。
%let list=
BDPREP BRCODE CONTNT COPAL CURSRY DFTEST DOCPST DSMS LABEL
MAILING MAILPC MERLIN MMS MPCV PRESRT PVDS SHPAID TAP WEIGHT
;
%do i=1 %to %sysfunc(countw(&list));
...
where verif_type="%scan(&list,&i)";
...
%end;
如果可以避免,请不要使用逗号作为列表中的分隔符。逗号会使您在函数和宏调用中使用列表变得更加困难。