目的
データを転置することができるSASのTRANSPOSEプロシジャを、Snowflakeで書き換える方法をご紹介します。
テストデータ
今回は上記の縦持ちデータを、以下のように横持ちのデータに変換します。
TRANSPOSEプロシジャとは
SASのTRANSPOSEプロシジャは、行と列を入れ替える(縦横変換する)処理です。
端的に言うと、以下の通りです。
・行データを列に変換(= ワイド形式への変換)
・または 列データを行に変換(= ロング形式への変換)
SASコード
PROC TRANSPOSE DATA=TEST_A OUT=TEST_B;
BY 商品コード;
ID 店舗名;
VAR 購入日;
SASコード解説
BYステートメントにはグループ分けしたいカラムを、
IDステートメントには横持ち後の列名に指定したいカラムを、
VARステートメントには横持ちにしたいカラムを指定することで、
簡単に転置することができます。
Snowflakeに書き換えるには
上記をSnowflakeで書き換えるには、PIVOTを使います。
PIVOTとは
SnowflakeのPIVOTは、行データを列に変換する機能です。
端的に言うと、以下の通りです。
・カテゴリの値を列に変換して、集計結果を並べる
・クロス集計のようなイメージ
注意点としては、以下の2点が挙げられます。
・FOR job IN (...)で列名として並べるカテゴリを明示すること
・集計関数(例:SUM、COUNTなど)と一緒に使うこと
Snowflakeコード
CREATE OR REPLACE TABLE TEST_B AS
SELECT * FROM TEST_A
PIVOT(SUM("購入日") FOR "店舗名" IN ('A店', 'B店', 'C店'))
AS p()
ORDER BY "商品コード";
Snowflakeコード解説
簡単に説明すると、SASコードでBY、ID、VARそれぞれに指定されているカラムを上記のSnowflakeの構文でそれぞれ以下の対応表に沿って書き換えれば再現可能です。
まとめ
SASのTRANSPOSEプロシジャは転置を意味します。
これをSnowflakeで書き換えるには、PIVOTを使えば再現可能です。
最後に
本記事ではSASの横持ち構文をSnowflakeで書き換える方法を説明しました。
SASからSnowflakeへコードを書き換える記事はそう多くないと思うので今後もこのような記事を投稿できればと思っております。
関連サイト
宣伝
株式会社ジールはMicrosoft Azure やAWS(Amazon Web Services)、Google Cloud Platform(GCP)、Oracle Cloud Infrastructure(OCI)など、多彩なクラウドプラットフォーム構築・運用の知見を有しています。そのため、複数のクラウドサービスを組み合わせるマルチクラウド環境においても、ベンダーロックインを回避し、お客様のご要望に応じた最適なクラウドプラットフォームの構築・運用への対応が可能です。
https://www.zdh.co.jp/products-services/cloud-data/