2016-07-26 214 views
1

我試圖將數字變量傳遞到此宏。我能夠通過KEEP和SET語句,但是當它到達RENAME語句時,我得到以下錯誤:在SAS中使用數字列名稱

錯誤:變量'2013'n不在文件WORK.'2013'n上。

錯誤:文件WORK上的DROP,KEEP或RENAME選項無效.'2013'n。

%macro step2(year,cwyear); 
    TITLE; FOOTNOTE; 
    DATA WORK._EG_CFMT; 
     LENGTH label $ 9; 
     SET WORK."&year."n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label)) END=__last; 
     RETAIN fmtname "cw&year."n type "C"; 

     end=start; 

       RUN; 
    %mend step2; 

當我在&年左右更改雙引號時。單引號,像這樣:

SET WORK.'&year.'n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label)) 

我得到這個錯誤:

錯誤:檔案工作「。 & YEAR.'n.DATA不存在。

當我變回所有雙引號和去除n的,我得到以下錯誤:

ERROR 22-322:語法錯誤,需要下列之一:名稱,引用的字符串,;, CUROBS,END,INDSNAME,KEY,KEYRESET,KEYS, NOBS,OPEN,POINT,DATALASTNULL

我該如何做這項工作?

感謝您的幫助!

+0

爲什麼你刪除'N'當你切換到雙引號? – Joe

+0

,因爲原始代碼有雙引號和n's,並且引發錯誤。我試圖測試一些不同於我已經知道不起作用的東西。 – theponcer

+1

原始錯誤消息只是說該變量不存在。你確定你沒有試圖通過它的標籤而不是它的名字來引用變量嗎? – Tom

回答

4

你需要有雙引號和n。名稱文字可以像使用其他字符串一樣使用單引號或雙引號。單引號不會解決它們內部的宏變量,double將會。

例子:

options validvarname=any; 
options validmemname=extend; 

data '2015'n; 
    '2015'n = 5; 
run; 

%macro do_something(year=); 
    data work.want; 
    set "&year."n(rename="&year."n = start); 
    run; 
%mend do_something; 

%do_something(year=2015); 
+0

但是,這不是我在我的例子中做什麼? – theponcer

+0

以上是正確的(如在,它的工作原理)。如果你的例子完全一樣,那麼你需要進一步查看問題的位置 - 可能變量沒有被命名爲你的想法。注意'options'語句 - 這些可能很重要。檢查你沒有'_2015'或'_015'而不是''2015'n'。 – Joe