サマリ | 縦横変換 |
---|---|
投稿者 | ふなまさ? |
状態 | |
投稿日 | 2010-05-18 (火) 13:18:42 |
質問
以下のように
data1があるとします。
proc print data1;run;
OBS ID Period1 Period2 Period3
1 A01 12.4 12.5 12.7
2 A02 16.5 16.8 16.5
3 A02 13.4 14.5 15.5
このdata1を使って以下のように変換してdata2とするにはどのようにプログラムすれば良いでしょうか?
data2
OBS ID Period val
1 A01 1 12.4
2 A01 2 12.5
3 A01 3 12.7
4 A02 1 16.5
5 A02 2 16.8
6 A02 3 16.5
7 A03 1 13.4
8 A03 2 14.5
9 A03 3 15.5
SASを使い始めてまもないのですが、このサイトをみて勉強させていただいており大変感謝しております。
よろしくご教授のほどお願いします。
回答
- 遅くなりました.3つほど示します. -- 翔 2010-05-19 (水) 23:29:03
data data1;
input ID $ Period1 Period2 Period3;
cards;
A01 12.4 12.5 12.7
A02 16.5 16.8 16.5
A03 13.4 14.5 15.5
;
/*方法1*/
data data2;set data1;
keep id period val;
period=1;
val=period1;
output;
period=2;
val=period2;
output;
period=2;
val=period3;
output;
run;
proc print data=data2;run;
/*
OBS ID period val
1 A01 1 12.4
2 A01 2 12.5
3 A01 3 12.7
4 A02 1 16.5
5 A02 2 16.8
6 A02 3 16.5
7 A03 1 13.4
8 A03 2 14.5
9 A03 3 15.5
*/
/*方法2*/
data data2;set data1;
array v(3) period1-period3;
keep id period val;
do period=1 to 3;
val=v(period);
output;
end;
run;
/*方法3*/
proc transpose data=data1 out=data2;
by id;
var period1-period3;
run;
/*変数名と値をちょっと直す*/
data data2;set data2;
keep id period val;
period=substr(_name_,7)+0;
val=col1;
run;
- ありがとうございます.PROC TRANCEPOSEは有用ですね。 -- ふなまさ? 2010-05-22 (土) 08:24:34