2017-05-04 14 views
0

既存の上位n変数から新しい変数を割り当てたいとします。私たちは列数増加しているテーブルがある場合 だから -SAS:データセットの最高変数からの出力

data have; 
input uid $ var1 $ var2 $ var3 $; 
datalines;      
1111 1 0 1 
2222 1 0 0 
3333 0 0 0 
4444 1 1 1 
5555 0 0 0 
6666 1 1 1 
; 

を私はfinal_codeとして変数VAR3を導出します。

data want; 
set have; 
final_code = max(of var1-var3); 
run; 

ここでは、var3列のみを残しておきたいので、ここでは意味がありません。同様に、もしvar4があれば、私はvar4だけを持っていたいと思う。

誰かが私をここで助けてくれるのですか?マクロ変数&nは、nの値を保持している

%let n=3 
data want; 
set have; 
var&n = max(of var1-var&n); 
drop var1-var%eval(&n-1); 
run; 

:私は、これはあなたが探しているものだと思います

+0

あなたは 'var3'の値だけを必要としていますか? – Joe

+0

はい。もしvar4があったら、var4などが必要です。 – ammosperros

+0

データセットの変数数を変更することはできませんので、これらのソリューションは完全なデータセットでは機能しません。あなたが望むものとより複雑な同じデータを正確に表示できますか? – Reeza

答えて

3

私があなたのことをよく理解していれば、maxの値はですが、最も高い番号の変数の値は望ましくありません。

これを行う方法はたくさんありますが、どのように変数に名前が付けられているかによって異なります。あなたが言うように実際に名前が付けられているなら、ここが最も簡単です。ここで

data want; 
    set have; 
    array var[*] var:; 
    final_code = var[dim(var)]; 
run; 

我々はvar:の外に列を作り、その後、(配列のサイズを避ける)dimを使用して、配列の最後の要素を選択してください。

0

です。これは、コードのコンパイル段階での代用として機能します。

DROPステートメントは、これらの変数を削除するようにデータステップに指示します。

%eval()マクロ関数は、マクロ値に対して整数演算を実行します。だから我々はN-1に1を落としている。

+0

n = 12の場合でも、#var3の値が必要ですか? @DomPazz、助けてくれてありがとう。 – ammosperros

+0

私はあなたが何を求めているのか十分に理解していません。もう少し詳しく説明できますか? – DomPazz

+0

上記のコメントに基づいて@ジョー答えはあなたが探しているものです。 – DomPazz

関連する問題