0

SASでは、私が持っているデータセットは次のとおりです。

id   A

1    2   
1    3 
2    1
3    1
3    2

ID は各個人に与えられ、A は 1、2、または 3 を取るカテゴリ変数です。A を 3 つの指標変数 (A1、A2、A3 など) に分ける各個人ごとに 1 つの観測値を持つデータを取得したいと考えています。

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

id A1 A2 A3 

1   0  1  1
2   1  0  0
3   1  1  0

SQLではなくデータステップでこれを行う方法を考えている人はいますか? 前もって感謝します。

4

1 に答える 1

1

あなたは正しい方向に進んでいます。転置ステートメントは間違いなく進むべき道です:

data temp;
   input id A;
   datalines;
    1 2
    1 3
    2 1
    3 1
    3 2
;
run;

最初に、変数 A を使用して id で転置します。

proc transpose data = temp
    out = temp2
    prefix = A;
    by id;
    var A;
    id A;
run;

次に、A で始まるすべての変数について、すべての欠損値を 0 に置き換え、すべての非欠損値を 1 に置き換えます。ここでの保持ステートメントは、変数を並べ替えます。

data temp3 (drop = _name_);
    retain id A1 A2 A3;
    set temp2;
    array change A:;
        do over change;
        if change~=. then change=1;
        if change=. then change=0;
        end;
run;
于 2016-05-06T20:17:28.213 に答える