SAS TRANSPOSE

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

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

今回はTRANSPOSEについて解説します。


/* num char char */
data data1;
  NO=1111; CHAR="A"; MOJI="AAAA";
    output;
  NO=2222; CHAR="B"; MOJI="BBBB";
    output;
  NO=3333; CHAR="C"; MOJI="CCCC";
    output;
  NO=4444; CHAR="D"; MOJI="DDDD";
    output;
  NO=5555; CHAR="E"; MOJI="EEEE";
    output;
  NO=6666; CHAR="F"; MOJI="FFFF";
    output;

run;


proc transpose data=data1 out=data2; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varが無いと、数値型の列で縦横の置換が起こる。

/* char num char */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;

run;


proc transpose data=data1 out=data2; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのCHARを横持ちにしている。
  • 変数名CHARは_NAME_,各値はCOL1,COL2…になる。
  • varが無いと、数値型の列で縦横の置換が起こる。

/* num num char */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNO,CHARを横持ちにしている。
  • 変数名NO,CHARは_NAME_,各値はCOL1,COL2…になる。
  • varが無いと、数値型の列で縦横の置換が起こる。

/* num char char var有 */
data data1;
  NO=1111; CHAR="A"; MOJI="AAAA";
    output;
  NO=2222; CHAR="B"; MOJI="BBBB";
    output;
  NO=3333; CHAR="C"; MOJI="CCCC";
    output;
  NO=4444; CHAR="D"; MOJI="DDDD";
    output;
  NO=5555; CHAR="E"; MOJI="EEEE";
    output;
  NO=6666; CHAR="F"; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。

/* char num char var有 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • varには文字型の変数も指定できる。

/* num num char var有 */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • varには数値型の変数も指定できる。

/* var複数 */
data data1;
  NO=1111; CHAR="A"; MOJI="AAAA";
    output;
  NO=2222; CHAR="B"; MOJI="BBBB";
    output;
  NO=3333; CHAR="C"; MOJI="CCCC";
    output;
  NO=4444; CHAR="D"; MOJI="DDDD";
    output;
  NO=5555; CHAR="E"; MOJI="EEEE";
    output;
  NO=6666; CHAR="F"; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO CHAR MOJI; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNO,CHAR,MOJIを横持ちにしている。
  • 変数名NO,CHAR,MOJIは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • varには複数の変数も指定できる。

/* var by */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var MOJI; by NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのMOJIをNOごとに横持ちにしている。
  • 変数名MOJIは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(A,B)

/* by var */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; by NO; var MOJI; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのMOJIをNOごとに横持ちにしている。
  • 変数名MOJIは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(A,B)
  • varとbyを入れ替えても実行できる。

/* by 数値型 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; by CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOをCHARごとに横持ちにしている。
  • 変数名NOは_NAME_,値はCOL1になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(1111, 2222…)
  • byには数値型の変数も指定できる。

/* varとbyで同じ変数 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; by NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOをNOごとに横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(A,B)
  • varとbyで同じ変数を指定しても、置換できる。

/* byのみ */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; by NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのCHARをNOごとに横持ちにしている。
  • 変数名CHARは_NAME_,各値はCOL1,COL2…になる。
  • 数値型の列で縦横の置換が起こる。
  • byにより、グループ単位を指定できる。(A,B)
  • byだけで、varが無くても置換はされる。

/* by 数値型 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; by CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 今回は、置換はされていない。
  • byにより、グループ単位を指定できる。(1111,2222…)
  • 数値型の列がbyで指定されているため、varが無い限りは、置換されない。

/* id */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;

proc transpose data=data1 out=data2; var MOJI; by NO; id CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのMOJIをNOごとに横持ちにしている。
  • 変数名MOJIは_NAME_,各値は1111,2222…になる。
  • varにより、置換する列を指定できる。
  • byにより、グループ単位を指定できる。(1111,2222…)
  • idにより、横持ちの際にさらにグループ分けできる。

/* idのみ */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;

proc transpose data=data1 out=data2; id CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 数値型の列(NO)で縦横の置換が起こる。
  • idだけで、varが無くても置換はされる。
  • 数値型の列(CHAR)がidで指定されているため、残った数値型の列(NO)で置換される。

-SAS, TRANSPOSE

執筆者:


comment

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

関連記事

【SAS】SUBSTR関数を使って右から文字列を切り取る方法について解説【LENGTHN】

今回はSUBSTR関数を使って右から文字列を切り取る方法について解説します。 (参考:【SAS】SUBSTR関数は文字列から指定した文字数分切り取る。 | ビジネスイッチ (how-to-busine …

【SAS】INTCK関数を使って年齢計算をする。【PUT】【SUBSTR】【IF】

今回はINTCK関数を使って、年齢計算を行う方法について解説していきたいと思います。 併わせて読みたい記事 (INTCK:【SAS】INTCK関数は指定された区間に指定された単位を何回跨ぐか数える。 …

【SAS】SUMは足し算をする。その2【要約関数】【SQL】

今回もSQLのSUM(要約関数)について解説します。 過去記事でも、SQLのSUM関数について取り上げました。【SAS】SUMは足し算をする。その1【SQL】 | ビジネスイッチ (how-to-bu …

【SAS】INDEXC関数は文字列から特定の文字を探して位置を返す。

今回はINDEXC関数について解説します。 data data1; Id1=”1111″; Id2=”1111″; Id3=”1111″; output; Id1=”2111″; Id2=”2111″ …

【SAS】IF文はデータ読み込み後にフィルター、WHERE文はデータ読み込み時にフィルターをする。

今回は、データ入力に着目して、IF文とWHERE文の違いを解説します。 /* if */ data data1; Id1=1111; Char1=”AAAA”; output; Id1=2222; C …