SAS TRANSPOSE

【SAS】TRANSPOSEは縦持ち、横持ちを変換できる。その2

投稿日:2021年11月12日 更新日:

今回も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が無いため、文字型は置換されない(?)

-SAS, TRANSPOSE

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】NLDATE関数はSAS日付値を設定した書式に変換して返す。

今回はNLDATE関数について解説します。 /* nldate_1 */ data data1; Id1 = nldate(’22jan2022’d,’%Y%m%d’); run; nldateにより …

【SAS】列名と列ラベルの表示を切り替える方法【LABEL】

今回はデータセットにおける列名と列ラベルの表示を切り替える方法を解説します。 /* label */ data data1; attrib Id1 length = 8 label = “Id1111 …

【SAS】足し算。その2(SUM関数を用いた計算)

今回はSUM関数を用いた足し算について解説します。  (前回は+演算子を用いた足し算について解説しました。⇒【SAS】足し算。その1(+演算子を用いた計算)) /* sum */ data …

【SAS】ARRAYステートメントは配列を設定することができる。その2

今回はarrayステートメント(その2)について解説します。 以前、過去記事でarrayステートメントについて解説していました。⇒【SAS】ARRAYステートメントは配列を設定することができる。 | …

【SAS】%MACROはマクロを定義することができる。その5 =を使うと数を渡す引数,数を受け取る引数を指定できる。【%MEND】

今回はマクロ引数に「=」を用いる方法について解説していきたいと思います。(事前に読んでおきたい記事:【SAS】%MACROはマクロを定義することができる。その3 マクロには引数を設定できる。【%MEN …