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】NODUPはソート時に全ての変数における重複を削除する

今回はNODUPについて解説します。 前回NODUPKEYについて解説しました。 【SAS】NODUPKEYはソート時に重複を削除する 今回のNODUPは前回の文法の亜種という感じです。 /*nodu …

【SAS】INPUTは文字型を数値型に変換する

今回はINPUTについて解説します。 /*8桁*/ data work.a; a = input(“20061228”, 8.); run; 文字型⇒数値型への変換はinputを使う。文字型&#822 …

【SAS】PRINTプロシージャは入力データセットの中身を結果に表示する【obs=】

今回はPRINTプロシージャについて解説します。 /* print */ data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAAAA” …

【SAS】INTCK関数は指定された区間に指定された単位を何回跨ぐか数える。

data data1; Id1 =intck(“YEAR”, ’31Dec2019’d, ‘1Jan2020’d); run; 2019/12/31~2020/1/1の間に年を何回跨ぐか数える。 /* …

【SAS】PUTはSAS日付値をフォーマットを変換して表示する【DATE】【YYMMDD】【DATETIME】【TIME】【TOD】

今回もPUTについて解説します。  前回、PUTは数値型⇒文字型への変換ができると解説しました。(参考:【SAS】PUTは数値型を文字型に変換する | ビジネスイッチ (how-to-bus …