SAS绘制的宏
问题描述:
我正在尝试绘制一些图。我需要用verf_typ_nmes中的名称将19个散点图代入数据和执行步骤,然后执行一次。我研究过谷歌,并认为我复制正确,但没有好处。SAS绘制的宏
我得到的错误: “预计%未在%DO语句中找到” 错误:将编译一个虚拟宏。
%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;
答
的%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;
如果可以避免,请不要在列表中使用逗号作为分隔符。逗号将使它更难在函数和宏调用中使用你的列表。
或者至少跳过数据步骤,并在'SGSCATTER'上的数据集选项中放置where ...但是,在大多数情况下,'BY'选项似乎最正确。 – Joe