我有多个名称相似的预先存在的数据集:EstOut_varname
我正在尝试使用 ODS TAGSETS 将它们全部输出到 Excel。我还使用宏函数来循环类似命名的数据集,如下所示。然而,在 Proc Print 内部,宏变量并没有像我想象的那样取消引用。
请提供建议 - 感谢您的帮助!
ods tagsets.excelxp style=sasweb
file="C:\Users\radhi\Desktop\estvars.xls";
%getBetas;
ods tagsets.excelxp close;
/*** Macro getBetas() to Loop over existing Datsets that I am trying to output to Excel ***/
/*** The Datasets are all named similarly - EstVar_varname -EstVar_varn1,EstVar_varn2,EstVar_varn3 ***/
%macro getBetas();
%let varnamelist = varn1 varn2 varn3 ;
%put &varnamelist;
%let end=%sysfunc(countw(&varnamelist));
%put &end;
%do i = 1 %to &end;
/*** save the varname to macrovariable &out ***/
%put out= %scan(&varnamelist., &i, " ");
proc print data=EstVar_&out.;
run;
%end;
%mend;
但是,SAS 不会取消引用 EstVar_&out。并且无法识别 &out :
proc print data=EstVar_&out.; run;
-
200
ERROR 200-322: The symbol is not recognized and will be ignored.
没关系 - 我只需要在 getBetas 宏的 %DO 循环中使用 %LET 而不是 %PUT!
%macro ...; ... %mend;
确实定义了一个宏,但它只在代码执行后才存在,zo define你的宏before你*use它。%put
-语句对于调试来说很方便,但它们不会为任何东西赋值。您应该使用 %let
语句为宏变量赋予值。ods tagsets
,所以我不保证下面的代码是正确的,但至少它正确地处理了宏和宏变量。* ... *;
评论应用了我个人的偏好,而不是/* ... */
评论。保留后面的注释代码可以让您注释掉带有注释的代码。ods
语句集成到宏中?%getBetas
,以便可重用?SQL