1

一致する個人レベルのデータセットを持たない、不十分に文書化された人月データセットを継承しました。人月データセットのどの変数が実際に人レベルの変数 (特定の ID を持つすべての観測値で一定) であるかを判断したいと考えています。単純な例:

id month dob    race tx weight
1  1     4058   1    1  105
1  2     4058   1    1  107
1  3     4058   1    2  108
2  1     1622   2    1  153
2  2     1622   2    3  153
2  3     1622   2    2  153

この例では、生年月日と人種は個人内で固定されていますが、tx と体重は個人内で月ごとに異なります。

私は不器用な解決策を思いつきました: proc means を使用してすべての数値変数の標準偏差を id で計算し、それらの標準偏差の最大値を取ります。変数の std の最大値が 0 の場合、個人内でその列の分散はなく、その変数に固定 (または個人レベル) としてフラグを立てることができます。

何百もの変数のどれが各個人内で固定されており、どれが個人の観察内で変化するかを判断するための、より単純な統計テストが欠けているように感じます。助言がありますか?

pT

4

2 に答える 2

1

標準偏差、またはMIN / MAX(ほぼ同じ)でさえ、あなたが取り組んだものを超える「単純な統計テスト」はないと思います。膨大な数の変数がない限り、おそらく PROC SQL でそれを行うでしょう。これにより、文字変数も使用できます。

%macro comparetype(var);
max(&var.) = min(&var.) as &var.
%mend comparetype;
proc sql;
select min(origin) as origin, min(type) as type, min(drivetrain) as drivetrain,
            min(msrp) as msrp,min(invoice) as invoice,min(enginesize) as enginesize from (
  select make,
%comparetype(origin),
%comparetype(type),
%comparetype(drivetrain),
%comparetype(msrp),
%comparetype(invoice),
%comparetype(enginesize)
from sashelp.cars
    group by make
);
quit;
于 2013-07-05T19:39:21.490 に答える
1

PROC FREQ で NLEVELS オプションを使用します。これにより、各変数の一意の値の数が得られるため、一意の値 (nlevels) が 1 の変数を探しています。コードは次のとおりです。まだ行っていない場合は、事前に ID でデータを並べ替える必要があります。

data have;
input id month dob race tx weight;
cards;
1  1     4058   1    1  105
1  2     4058   1    1  107
1  3     4058   1    2  108
2  1     1622   2    1  153
2  2     1622   2    3  153
2  3     1622   2    2  153
;
run;

ods select nlevels;
ods output nlevels=want;
ods noresults;
proc freq data=have nlevels;
by id;
run;
ods results;
于 2013-07-08T08:44:55.847 に答える