0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SASによるcsvの縦結合

0
Posted at

はじめに

 期間粒度別(日次・週次・月次)にcsvデータが連携された場合に、SASでcsvデータの縦結合を行う方法を紹介します。また、実務でのコードの取り扱い方法についても紹介します。
 なお、今回使用するサンプルデータは、Githubにアップしてあります。

使用するデータについて

 使用するデータは、商品ごとの日別売上件数データです。データ取得期間は、2024年4月から2024年8月の5か月間です。今回は、毎月月末に1か月分の商品販売実績が、連携されることを想定しています。

カラム名 データ型 説明
日付 数値 商品販売日次 
商品A 数値 商品Aの販売件数
商品B 数値 商品Bの販売件数
商品C 数値 商品Cの販売件数

利用環境について

SAS® OnDemand for Academics: Studioから利用できるSAS studioを使用しています。

コード

 複数のcsvを縦結合するSASのコードは以下の通りです。

/*自身の環境に応じてフォルダパスを修正してください。*/
%let path = /home/username/filename;

Filename FL ("&path/*.csv");

data OUT;
	infile FL dsd missover eov=eov;
	eov = 0;
	input @;
	if _N_ ^= 1 and eov ^= 1 then do;
    /*csvの中身に応じてinputの中を修正してください。*/
	input
	 '日付'n : $8.
	 '商品A'n : $3.
	 '商品B'n : $4.
	 '商品C'n : $2.
	;
	output;
	end;
run;

 最初に、%LETステートメントで、変数pathにフォルダパスを割り当てます。今回のコード例では、/home/username/filenameを割り当てています。
 次に、Filenameステートメントで、/home/username/filenameの直下のcsvファイルを取得します。格納されているすべてのcsvファイルを取得するには、*.csvとします。&pathを使うことで、%LETステートメントで割り当てた、変数pathを参照することが可能です。
ここまで、完了したら、csvを読み込み結合します。infileステートメントで、読み込むファイルを指定します。事前にFLにはcsvのファイルが割り当てられているので、infile FLとすることによって、FLのファイルを指定することになります。dsdは、dlmオプションで指定された文字が連続した場合は、欠損値を格納するオプションです。dsd dlm=','というような使われ方ですが、csvの際はdsdだけ使用も可能です。missoverは、同じ行でinputステートメントの中の変数の数と区切られたデータの数が一致しない場合に、欠損値を返します。inputステートメントの変数の数は、今回は4変数となります。
 ここで、今回5つのcsvファイルがありますが、最初に読み込んだcsvファイルの1行目に_N_=1フラグが、2つ目以降のcsvファイルの1行目にはeov=1のフラグが立ちます。if _N_ ^= 1 and eov ^= 1 then do;とすることで、各csvの2行目以降のデータが取得されinputされるようになっています。
 inputの中身は、csvの内容に応じてカラム名やデータ型を記載します。例えば、'日付'n : $8は日付のカラムについて、8桁の数値で取得することを意味しています。

最後に

 実際に実務で取り扱う場合は、自身の環境やcsvデータの中身に応じて、上記コードの%LETのフォルダパスとinputのカラム名やデータ型を修正することのみを意識しておけばよいです。

参考文献

  • SASYAMA, "filenameで複数ファイルを一括指定して、読み込む場合に各ファイル1行目がラベル行だと、難しいことになるがeovをうまく使えば解決できる話", "データステップ100万回 SAS新手一生", 2015/6, https://sas-tumesas.blogspot.com/2015/06/filename1eov.html, (参照 2025/12/25)
  • a.matsu, "INFILEステートメントの DSD MISSOVER の挙動", "SAS備忘録", https://sas-boubi.blogspot.com/2016/10/infile-dsd-missover.html, (参照 2025/12/25)
  • 高浪 洋平, 舟尾 暢男, 『統計解析ソフト「SAS」 改訂版』, カットシステム, 2015
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?