私は取り組んでいるちょっとした問題を抱えており、近いと思いますが、タスクを完全に完了することはできません.
40 人の異なる人の値の 16 行/観察を含むデータセットがあります。私が計算したいのは、16 の観測値のそれぞれについて 2 つのスコアのうち高い方を採用した場合に、どのペアの人が最も高い値になるかということです。
data test;
input A B C D;
datalines;
22.82 17.74 5.94 19
10.16 17.74 23.12 6.62
10.62 10.76 24.72 11.3
28.06 6.92 22.26 11.34
;
run;
上記は、読みやすさのために 16x40 ではなく 4x4 のスニペット バージョンです。
2 つのラベルを一緒に追加することにより、比較と新しい変数の作成を処理する小さなデータ ステップとマクロを考え出しました。
data test2;
set test;
%macro mk_combinations(first_var, second_var);
&first_var._&second_var. = max(of &first_var. &second_var.);
%mend mk_combinations;
%mk_combinations(A, B);
%mk_combinations(A, C);
%mk_combinations(A, D);
%mk_combinations(B, C);
%mk_combinations(B, D);
%mk_combinations(C, D);
run;
これは、A と C の組み合わせが最高の総計になることを示すために私が探していたものを達成しますが、変数が 40 個あるため、このマクロを手動で何度も呼び出すことは現実的ではありません。
複雑なことに、フィールドは 1 文字ではなく、姓と名のフィールドであり、使用できる数値 ID もありますが、proc 転置後は _1 から _40 になります。
私の質問の最初の部分は、プログラムで %mk_combinations を呼び出す最良の方法は? do ループを使用して配列を試しましたが、機能しません。
2 番目の質問は、それが解決されたら、16 個の観察結果を単純に合計する最も簡単な方法は何ですか? 最初は簡単な部分だと思っていましたが、私が知っているすべての方法は、すべての変数を呼び出して明示的に合計することに依存しています。つまり、proc means または proc SQL です。
この問題を解決する方法についてのアイデアはありますか? この問題に対するより良いアプローチはありますか?