先日紹介したsas公式のgithubの中に、指定したフォルダ内の全てのsasプログラムを読み込むマクロが含まれている。ある程度指定した順番に読み込んだりと高機能なものだ。
その辺の微調整が出来ないもっと単純な読み込みプログラムを私も持っているので、せっかくということで記事にする。以下の1行で指定したフォルダ、今回はhoge直下の.sasファイルを全部読み込んでいる。読み込む順番が調整できなかったりなどできないことが多いが、まあ気を付けていれば私には今の所コレで十分ではある
先日紹介したsas公式のgithubの中に、指定したフォルダ内の全てのsasプログラムを読み込むマクロが含まれている。ある程度指定した順番に読み込んだりと高機能なものだ。
その辺の微調整が出来ないもっと単純な読み込みプログラムを私も持っているので、せっかくということで記事にする。以下の1行で指定したフォルダ、今回はhoge直下の.sasファイルを全部読み込んでいる。読み込む順番が調整できなかったりなどできないことが多いが、まあ気を付けていれば私には今の所コレで十分ではある
変数ラベルや長さなどの変数情報だけを確定させるために0obsのデータセットを作ることがあるのですが、昔はstopステートメントを仕込めば初期化されていませんのメッセージを出さないように出来……ましたよね?0件のデータセット作るときのログに初期化されていませんのメッセージ出るとちょっと嫌だったので……
どうもちょっと前からstopを仕込んでもログに初期化されて~のメッセージが出てる気がするんですよね…そもそも昔からこのメッセージは出ていたのか?手癖で処理していたのでちゃんと覚えてない自分が恨めしい
以下の様に変数aの定義だけ持たせた0件のデータを作成すると、値が無いのでメッセージが出ます
17 data piyo ;
18 attrib a length = $10 ;
19 run ;
NOTE: 変数aは初期化されていません。 <- これ
NOTE: データセットWORK.PIYOは1オブザベーション、1変数です。
NOTE: DATA ステートメント処理(合計処理時間):
処理時間 0.03 秒
CPU時間 0.01 秒
21 data piyo ;
22 attrib a length = $10 ;
23 stop ;
24 run ;
NOTE: 変数aは初期化されていません。 <- これが昔は出なかったような…
NOTE: データセットWORK.PIYOは0オブザベーション、1変数です。
NOTE: DATA ステートメント処理(合計処理時間):
処理時間 0.06 秒
CPU時間 0.01 秒
キーとなる変数でデータセットが一意に定まるかを確認する時はproc sortを使っています。nouniquekeyオプションを使えば、重複してるレコードをだけをデータセットとして作れるので便利ですね。
仮にデータセットhogeが以下の様にあったとして、変数aの値が1obsと2obsで1で重複しています
後は以下の通り重複するobsをKEY_NO_UNIQUEデータセットに格納して、このデータセットにレコードがあればログにerrorを出す、とすれば重複があるかどうかはログを見るだけでokです。詳しい重複の内容はデータセットを見てください。
proc sort data = hoge out = KEY_NO_UNIQUE nouniquekey ;
by a ;
run ;
data _null_ ;
if 0 then set KEY_NO_UNIQUE nobs = _nobs ;
if _nobs ^= 0 then putlog "E" "RROR NoUnique: Check KEY_NO_UNIQUE dataset" ;
stop ;
run ;