SAS - 使用 ODS 标签集和宏变量将多个数据集打印到 Excel

问题描述 投票:0回答:1

我有多个名称相似的预先存在的数据集: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!

sas
1个回答
0
投票
  1. %macro ...; ... %mend;
    确实定义了一个宏,但它只在代码执行后才存在,zo define你的宏before你*use它。
  2. %put
    -语句对于调试来说很方便,但它们不会为任何东西赋值。您应该使用
    %let
    语句为宏变量赋予值。
  3. 免责声明:我从未使用过
    ods tagsets
    ,所以我不保证下面的代码是正确的,但至少它正确地处理了宏和宏变量。
  4. 我对
    * ... *;
    评论应用了我个人的偏好,而不是
    /* ... */
    评论。保留后面的注释代码可以让您注释掉带有注释的代码。
  5. 为什么不将
    ods
    语句集成到宏中?
  6. 为什么不将数据集名称前缀、后缀列表和目标文件参数设置为
    %getBetas
    ,以便可重用?
  7. 免责声明:我没有测试它,所以我把调试的乐趣留给你。
  8. 我在这里停下来是因为你已经有很多东西需要学习,但如果是我的话,我会编写一个宏来打印名称与类似条件匹配的所有数据集,这将替换前两个宏参数。
    
    
  9. SQL
© www.soinside.com 2019 - 2024. All rights reserved.