2017-03-19 2 views
0

私はSASを初めて使用しているので、この質問が単純すぎる場合はお詫びします。私はこれについて広範な調査をしてきましたが、どのように進めるべきかはわかりません。増分でグローバルマクロ変数を使用してSAS DATAセットを初期化する

既に存在するマクロ変数var1、...、varNに対応する機能を持つ新しいSASデータセットを初期化しようとしています。簡潔にするために、Nがこれらの変数の生成過程でマクロ変数としてすでに定義されていると仮定します。私は動作しません。次のコード、の線に沿って何かをしたい:

%let var1 = 3; 
%let var2 = 2.5; 
%let var3 = 1; 
[...] 
%let varN = 2; 


Data ABC; 
    do i = 1 to &N; 
    x = var&i.; 
    end; 
run; 

私は問題の一つは、%とは異なり、「i」は、マクロ変数ではないかということであると信じています。私はcat(var、i)で変種を試しましたが、解決するために& var &が必要なので、望ましい動作がありません。 DATAステップ内でこの作業を行う方法はありますか?

答えて

3

実際にこれを行うのは実際には良い考えではありませんが、ここには答えがあります。標準マクロ変数& & var & iを使用することはできません。これは%DOループが必要なためです。それをデータステップに保持するには、SYMGETを使用します。

%let var1=1; 
%let var2=2; 
%let var3=3; 
%let N=3; 

Data ABC; 
    do i=1 to &N; 
     x = symget(catt('var', i)); *character value; 
     y = symgetN(catt('var', i)); *numeric value; 
     output; 
    end; 
run; 

proc print data=abc; 
run; 
+0

ありがとう、@Reeza。なぜこれがいいアイデアではないか教えてください。よりよいアプローチは何でしょうか? – Lepidopterist

+1

symgetN - Xは数値でなければなりません –

+0

ありがとう@data_null_、私は変更を加えました。 – Reeza

関連する問題