2017-11-02 4 views
-1

Teradata Sql(可能であればSASでも可能です)いくつかのフィールドで重複を根絶しようとしています。与えられたID。私はその列の新しい価値を失いたくないので、新しい列として書きたいと思います。任意の数の異なる値が存在する可能性があるため、それぞれを個別にカウントし、それぞれに新しい列を書き込む必要があります。以下の表の例である:同じIDの別個の行の値を書き込むために新しい列を動的に作成

ID | V1 | V2 | 
A | Mike | 25 | 
A | Mike | 26 | 
A | Mike | 27 | 

へ:

ID | V1 | V2 | V2.1 | V2.2 | 
A | Mike | 25 | 26 | 27 | 
+0

別のマイク行が挿入されると、どのような結果になるでしょうか?第4列が突然表示されますか? – jarlh

+0

@jarlhはい、マイクが新しい「ID」になるまで列を追加したいと考えています – CGermain

答えて

1

これは、動的に新しい列を作成しますproc transposeを使用してSASで簡単に行うことができます。この場合、by変数をid(またはidV1の組み合わせ)に設定します。

data tmp; 
input id $ V1 $ V2; 
    datalines; 
A Mike 25 
A Mike 30 
B Mark 4 
C Mack 23 
C Mack 40 
C Mack 90 
; 
run; 

proc sort data=tmp; 
by id v1; 
run; 

proc transpose data=tmp out=trans; 
by id V1; 
var v2; 
run; 

proc print; 

結果の出力は次のようになります。

Obs id  V1  _NAME_ COL1 COL2 COL3 

1  A  Mike  V2  25  30  . 
2  B  Mark  V2  4  .  . 
3  C  Mack  V2  23  40  90 

ドキュメントに出力の名前を変更することが可能な他の多くのオプションがあります。

+0

ありがとう、私はこれを試してみます。私はこれを行うために必要ないくつかの列があることを言及することを忘れてしまった。ですから、複数のvarをproc transposeで使用できますか? – CGermain

+0

はい、複数のヴァースを使用できます。それらはデフォルトで '_NAME_'変数の下にリストされます。 –

+0

私は_NAME_列のV2を理解していないと思います。 Mike、Mark、MackはそれぞれID A、B、Cとしてはいけませんか?私はこれを実行しようとしましたが、5つの変数があり、SAS EGは私にとっては凍りつきました...小さなデータセットを試してみます。 – CGermain

関連する問題