うずまき2017 powered by Jun-Systems

耳管開放症, SAS, 統計解析, 人工知能, プログラミングそれに思考

*

【忘備録】SASで巨大データセットから先頭100Obsを抽出

   

10億件とかのデータセットにデータステップで処理かけるのに、すげー時間かかった挙句に処理がうまくいってなかったら嫌じゃないですか。未だにそんなことやってるんですかって思われるかもしれませんけど、試しに先頭の100オブザベーションだけ抽出して一回処理かけたりしてるんですよ私は。

で、それを行うための先頭100Obsの切り出しに

data test;
   set raw;
   if _n_ < 101;
run;

とかいうクソコードを走らせていたんですね。
これ_N_が101超えた瞬間に読み出し止めてくれればいいのに律儀に10億件のデータセットの最後まで「このObsは_n_<101か?」みたいな確認をしてくれてるみたいで、普通に莫大な時間がかかるんですよね。一晩かけたりしてて、正直なんとかならねえのかなと思ってたんですよ。 でも今日何気なく、全く関係ないif _n_=1 then setのことを調べていて、データステップ100万回 SAS新手一生: 1obsのデータセットの値を他のデータセットに対して引き延ばして結合する辺りを読んでた時に、2つのデータセットをSET;SET;するときにObs数の小さい方にデータセットが切り落とされる話の中で以下の記述があったわけです。

SET;SET;はいずれかのデータセットのファイル終端を見つけた時点でオブザベーションの作成を打ち切る

ってことは、これ使えば100億件のObsでも100件の時点で読み込みを止められるじゃないですかー!やったー!ということです。

data dummy;
   do _i = 1 to 100;
      output;
   end;
run;
data test;
   drop _:;
   set dummy;
   set raw;
run;

これでrawのObsを100件まで読み込んだ時点でデータセットの読み出しが終わるわけじゃないですか。んで実際やったら本当に1秒ぐらいで終わりました。twitterのデータ読み出しとか実装してたくせにこんなとこで詰まってるんですかって感じですが。

っていうか色々考えてて思ったんだけどもっとシンプルな方法あるんじゃねえかこれ。でもまあとりあえず今はいいや。


 - SAS, SAS Programming ,

Message

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

  関連記事

SAS超基礎1 データの読み書き
SASでディレクトリ内の全フォルダを自動でライブラリに追加する
no image
SASで直接twitterを検索してTLをインポート(PROC HTTP/Twitter OAuth)
no image
SASでHHI(ハフィンダール指数)を計算するマクロを作った
no image
SAS上で走っているRとSASでのデータセットの受け渡し
no image
SASのPROC SQLで一括操作(変数名の変更 / ダミー変数操作など)
no image
SASでウェブ上のcsvファイルを直接読み込む
SASでカテゴリカルな変数をダミー変数化するマクロ
SASでランダムサンプリングしてグループ分けするマクロ
no image
2014年IT関連まとめ