2016-07-26 19 views
1

数値変数をこのマクロに渡そうとしています。私はKEEPステートメントとSETステートメントを通すことができますが、RENAMEステートメントに到達すると、これらのエラーが発生します。SASの数字列名を使用

エラー:変数 '2013'nはファイルWORK.'2013'nにありません。

エラー:ファイルWORK.'2013'nに無効なDROP、KEEP、またはRENAMEオプションがありません。

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

私はこのエラーを取得する:

ERROR:ファイルWORK」 & YEAR.'n.DATAは存在しません。

私はすべて二重引用符に戻って変更して、n個のを削除すると、私は次のエラーを取得する:

ERROR 22から322:構文エラー、次のいずれかの期待:名、引用符で囲まれた文字列を、;、 CUROBS、END、INDSNAME、KEY、KEYRESET、KEYS、 NOBS、OPEN、POINT、DATA、LASTNULL

この作品を作成するにはどうすればよいですか?

ありがとうございました!

+0

あなたは二重引用符に変更したときに、なぜあなたは 'N'を削除しますか? – Joe

+0

元のコードに二重引用符とnがあり、エラーが発生しているためです。私はすでに何かが動作していないと知っているものとは異なるものを試そうとしていました。 – theponcer

+1

元のエラーメッセージは、変数が存在しないということだけです。名前の代わりにラベルで変数を参照しようとしていませんか? – Tom

答えて

4

あなたは二重引用符とnを持つ必要があります。名前リテラルは、他の文字列と同様に一重引用符または二重引用符を使用できます。一重引用符で囲まれたマクロ変数は二重引用符では解決されません。

例:

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'n'ではなく '_2015'または' _015'を持っていないことを確認してください。 – Joe

関連する問題