在SAS

2016-08-23 49 views
1

命名文件更新一個變量,我有點新的SAS。我試圖通過循環更新文件名以寫入excel文件,但無法分配文件名。這裏是我的代碼:在SAS

%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; 

我已經嘗試了很多這樣的變化,但每次,我總是相處的線一條錯誤消息「錯誤:文件名DAILYRET沒有邏輯分配」。

有什麼辦法,我可以做到這一點,這樣我就不必把物理報價在符合「文件=」和能夠更新的一年?

非常感謝!

-Angel

+0

DATA步驟的目的是什麼?此外,您似乎還有很多全球聲明(ODS,OPTIONS)混合到數據步驟的中間。 – Tom

+0

DATA步驟的目的是將連接字符串分配給變量「dailyret」,這樣我就可以將變量「dailyret」分配給文件名。我曾嘗試直接分配 「CATX(STRIP(YEAR1), '' '/ H1/usr11 /安傑利/芬蘭/ HAZ/phreg_dailyret_', '的.csv ''')」 的文件名,但它給了我一個錯誤好。老實說,因爲我對SAS很新,我不確定ODS和OPTIONS究竟做什麼,但是當我搜索如何創建一個文件來優化時,那是我找到的代碼。有什麼辦法可以更新MACRO變量year1並將其分配給文件名? – Angel

+0

對於這個簡單的問題,只需將宏變量引用放在你想要的地方。對於更復雜的問題,您可能會運行一個數據_null_步驟來生成一個宏變量(使用CALL SYMPUTX()函數),然後您可以在數據步驟結束後使用它來生成其他代碼,如ODS語句。 – Tom

回答

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; 
+0

我試過你寫的代碼,它的工作原理!非常感謝你!對不起,我是這個網站(和SAS)的新手,並沒有看到你的代碼! – Angel