在SAS中命名文件时更新变量

时间:2016-08-23 00:12:59

标签: excel sas

我对SAS有些新意。我正在尝试更新文件名以通过循环编写excel文件,但是在分配文件名时遇到问题。这是我的代码:

%MACRO loop;
    %DO year1 = 1995 %TO 2008;
        DATA _NULL_;
            dailyret = catx(STRIP(&year1),
            '''/h1/usr11/angeli/finland/haz/phreg_dailyret_',  '.csv''');

           *to save output to excel;
           ODS TAGSETS.EXCELXP
           file= %QUOTE(dailyret)
           STYLE=minimal
           OPTIONS ( Orientation = 'landscape'
           FitToPage = 'yes'
           Pages_FitWidth = '1'
           Pages_FitHeight = '100' );

           *a block of code that runs the program, irrelevant to my question;

           ods tagsets.excelxp close;

       RUN;
    %END;
%MEND loop;

%loop;

我已经尝试了很多这方面的变体,但每次,我总是得到一条错误信息:“ERROR:没有逻辑分配文件名DAILYRET”。

我有什么方法可以做到这一点,这样我就不必将物理引号放在“file =”的行中,并且能够更新年份吗?

非常感谢你!

-Angel

1 个答案:

答案 0 :(得分:2)

引用宏变量前缀为&。请确保使用双引号字符"来引用文件名,因为宏引发符未在单引号内解析。

您还可以选择在宏名称后附加句点,以便解析器知道宏变量名称的结束位置以及常规文本的重新开始。这意味着当您想要附加一个以句点开头的扩展名时,您需要有两个句点,因为第一个句点将用于标记宏变量引用的结尾。

%MACRO loop;
  %DO year1 = 1995 %TO 2008;
    ODS TAGSETS.EXCELXP
        file= "/h1/usr11/angeli/finland/haz/phreg_dailyret_&year1..xml"
        STYLE=minimal
        OPTIONS ( Orientation = 'landscape'
                  FitToPage = 'yes'
                  Pages_FitWidth = '1'
                  Pages_FitHeight = '100' 
                )
    ;

*-------------------;
*a block of code that runs the program, irrelevant to my question;
*-------------------;

    ods tagsets.excelxp close;

  %END;
%MEND loop;