0

私は、さまざまな次元のさまざまな人/機器によって行われた一連の読み取り値で構成されるデータセットを持っています。次のようになります。

SUBJECT DIM1_1 DIM1_2 DIM1_3 DIM1_4 DIM1_5 DIM2_1 DIM2_2 DIM2_3 DIM3_1 DIM3_2
1       1      .      1      1      2      3      3      3      2      .
2       1      1      .      1      1      2      2      3      1      1
3       2      2      2      .      .      1      .      .      5      5
...     ...    ...    ...    ...    ...    ...    ...    ...    ...    ...

私の実際のデータセットには約 190 のディメンションが含まれており、それぞれに最大 5 つのメジャーがあります

ディメンションごとに新しい変数を作成するには、一連のルールに従う必要があります。

  • 同じ次元に 2 つの異なる値がある場合 (欠損値を除く)、新しい変数は欠損値です。
  • すべての値が同じ (欠損値を除く) 場合、新しい変数は同じ値を想定します。

新しい変数は次のようになります。

SUBJECT  ...  DIM1_X DIM2_X DIM3_X
1        ...  .      3      2
2        ...  1      .      1
3        ...  2      1      5

ここでの問題は、各ディメンションに対して同じ数のメジャーがないことです。また、私は多くの IF しか思いつきませんでした (つまり、与えられた次元のより多くのメジャーが比較の数を増やすので、LOT を意味します)、この特定の問題を処理する簡単な方法があるかどうか疑問に思います。

どんな助けでも感謝します。前もって感謝します。

4

1 に答える 1

2

最も簡単な方法は、それを垂直に転置し (DIMx_y ごとに 1 行)、要約してから、欠落させたいものを欠落に設定し、再転置します (必要に応じてマージして戻します)。

data have;
input SUBJECT DIM1_1 DIM1_2 DIM1_3 DIM1_4 DIM1_5 DIM2_1 DIM2_2 DIM2_3 DIM3_1 DIM3_2;
datalines;
1       1      .      1      1      2      3      3      3      2      .
2       1      1      .      1      1      2      2      3      1      1
3       2      2      2      .      .      1      .      .      5      5
;;;;
run;

data have_pret;
set have;
array dim_data DIM:;
do _t = 1 to dim(dim_Data); *dim function is not related to the name - it gives # of vars in array;
 dim_Group = scan(vname(dim_data[_t]),1,'_');
 dim_num =  input(scan(vname(dim_data[_t]),2,'_'),BEST12.);
 dim_val=dim_data[_t];
 output;
end;
keep dim_group dim_num subject dim_val;
run; 

proc freq data=have_pret noprint;
by subject dim_group;
tables dim_val/out=want_pret(where=(not missing(dim_val)));
run;

data want_pret2;
set want_pret;
by subject dim_Group;
if percent ne 100 then dim_val=.;
idval = cats(dim_Group,'_X');
if last.dim_Group;
run;

proc transpose data=want_pret2 out=want;
by subject;
id idval;
var dim_val;
run;
于 2013-04-17T17:35:15.917 に答える