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】SAS日時値をyyyymmddhhmmss形式にする。【PUT】【DATETIME】【DATEPART】【TOD】

今回はdatetime関数を使って、SAS日時値を取得した後、yyyymmddhhmmss形式に加工する方法を解説していきます。 (参考PUT:【SAS】PUTはSAS日付値をフォーマットを変換して表 …

【SAS】SORTプロシージャはBYで指定した変数で並べ替える その1 昇順

今回はSORTプロシージャについて解説します。 /*sort1*/ data data1; id1=”1111″; id2=”1111″; output; id1=”1111″; id2=”2222″ …

【SAS】COMPRESS関数は文字列の空白を削除し、詰める。(COMPRESS関数 その1)

今回はCOMPRESS関数について解説します。 /* compress */ data data1; Id1=1111; Char1=”AA AA”; output; Id1=2222; Char1= …

【SAS】SASで良く使うテクニック。その1 Excel関数のIF~2テーブルを比較したいとき~

今回はSASで良く使うテクニックということで、2テーブルを比較するときはExcelでIF関数を使うと良い理由を解説していきます。 ぜひ、やってみてください。 まずは比較したいデータセット2つをExce …

【SAS】DISTINCTは重複をユニークにする。【SQL】

今回はSQL文のDISTINCTについて解説します。 /* Id1 */ data data1; Id1=1111; Id2=1111; Id3=1111; Id4=1111; output; Id1 …