今回もTRANSPOSEについて解説します。
前回は縦持ち⇒横持ちにする流れで解説してきました。
今回は横持ち ⇒ 縦持ちの流れに沿って解説していきたいと思います。
前回のコードを流用して縦⇒横持ちにした後、もう一度transposeを噛ませることで横⇒縦持ちにしていきます。
/* 正常形 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; var aaaa bbbb cccc dddd eeee ffff; by NO; run;
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 今回は、横持ちのMOJIをNOごとに縦持ちにしている。
- varにより、置換する列を指定できる。
- byにより、グループ単位を指定できる。(A, B)
/* varなし byなし1 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; run;
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)
- byが無いと、_NAME_で同じ値が2回出現した時にエラーとなる(?)
/* varなし byなし2 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; run;
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)
/* byなし */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; var aaaa bbbb cccc dddd eeee ffff; run;
- transposeにより、縦持ち横持ちを入れ替えることができる。
- varにより、置換する列を指定できる。
- byが無いと、_NAME_で同じ値が2回出現した時にエラーとなる(?)
/* byなし2 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; var aaaa bbbb cccc; run;
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 今回は、横持ちのMOJIをNOごとに縦持ちにしている。
- varにより、置換する列を指定できる。
- byが無いくても、_NAME_で1回出現しただけならエラーにならない(?)
/* byのみ */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; by NO; run;
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)