2021年3月9日火曜日

データセットを2回転置する話

 大したことない内容なのでタイトルをどうするかにすごく悩んでしまいました.

sasで集計した時,以下のように1群1obsのデータセットが出来たとします.ARM1の時の数と割合が横に持っていて,同じようにARM2の時が縦に積まれているような状態ですね.これをARM1の数と割合,ARM2の数と割合をそれぞれ同じobsに別の変数として持ちたい時がありますか?ありますよね?そう,あるんですよ

要は2obs3変数(群,数,割合)のデータセットを,1obs5変数(群,群1の数,群1の割合,群2の数,群2の割合)に変換すると言うことです.群1と2の数を転置して横持ち,群1と2の割合を転置して横持ち,最後にそれぞれのデータセットをmergeして1obs5変数のデータセットを作っているプログラムを見て,多分転置2回した方が早いんじゃないか...?と思ったのでここに供養します.


data hoge ;
  ARM = 1 ; COUNT = "1" ; PERCENT = "10%" ; KEY = 1 ; output ;
  ARM = 2 ; COUNT = "2" ; PERCENT = "20%" ; KEY = 1 ; output ;
run ;

proc sort data = hoge;
    by KEY ARM ;
run;

proc transpose data = hoge out = __hoge ;
    by KEY ARM ;
    var COUNT PERCENT ;
run;

proc transpose data = __hoge out = OUT ;
    by KEY;
    id _NAME_ ARM ;
    var COL1 ;
run;

これを実行すると,ARM KEY COUNT1 PERCENT1 COUNT2 PERCENT2の1obsが得られます.KEYの持たせ方を変えれば縦に一部を詰むこともできるのでお試し下さい…

0 件のコメント:

コメントを投稿