スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SAS:インデックスを消さずにデータ更新する方法

SASで、インデックスや主キーを消さずにデータ更新する方法。
SASにはMySQLのReplace文が無い。(Proc SQLでやってもだめだった)
AppendプロシージャとProc SQLのModifyでやるのも面倒くさい。

ということでSASのサポートに問い合わせてみたところ、以下のようなとっても分かりやすいサンプルを教えてくれたのでメモとして残します。

【インデックスを消さずにデータステップを回す方法】
→ MODIFYステートメントで解決!

/*---------------------------------------------*/
/*-- Sample Program ---------------------------*/
/*---------------------------------------------*/
/* マスターデータセット */
data data0(index=(key1 key2));
input key1 key2 $ value;
datalines;
1 A 100
2 A 200
3 A 300
;
run;

/* トランザクションデータセット */
data data1;
input key1 key2 $ value;
datalines;
3 A 0.01
4 A 0.02
5 A 0.03
;
run;

data data0;
modify data0 data1(rename=(value=temp));*key以外で重複する変数名は一旦リネームする必要がある*;
by key1 key2;
select (_iorc_);*存在する/しないをコントロールするシステム変数*;
/* データが存在する場合、「書き換え」する */
when (%sysrc(_sok)) do;
value=temp;
replace;
end;
/* データが存在しない場合、「追加」する */
when (%sysrc(_dsenmr)) do;
value=temp;
output;
_error_=0;
end;
otherwise do;
put '予期せぬ I/O エラー';
_error_=0;
stop;
end;
end;
run;
/*---------------------------------------------*/

○参考資料
[Modifying a Master Data Set with Observations from a Transaction Data Set]
http://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/a001772743.htm

スポンサーサイト

トラックバック

コメント

コメントを残す

Secret



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。