僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

0115

fetchobs関数  

入社1年目(約10年前)に上司が使っていて、未だに完全に理解できていないfetch関数とfetchobs関数についてメモを残しておきます。fetch関数もfetchobs関数も、DATAステップから異なるデータセットを読み込んでそのオブザベーションに対して処理を行うことができる関数です。複数のデータセットから情報を取得する必要がある際に便利な関数です。
fetch関数:データセットの次のオブザベーションを読み込みます。fetch(dsid)で使用します。dsidはデータセットの番号で、open関数で取得します。。
fetchobs関数:データセットの指定したオブザベーションを読み込みます。fetch(dsid,i)で使用します。iはオブザベーションの番号を指定します。

ここでは、fetchobs関数を使用して、classデータセットの「トーマス」という生徒が、欲しい製品が「パソコン」で、それぞれ別のデータセットから情報を取得する方法を例示します。
%let NAME   = %str(トーマス) ; *--- 名前
%let SHOHIN = %str(パソコン) ; *--- 欲しい製品 ;
*** 製品のリスト ;
data _LIST ;
input NO PRODUCT $ PRICE yen10. ;
cards;
1 冷蔵庫 \123,000
2 パソコン \98,000
3 タブレット \39,800
4 デスク \60,000
5 掃除機 \29,800
6 エアコン \230,000
;
run ;
*** 名前と欲しい製品データを各データセットから抽出 ;
data TEST ;
*--- 外から読み込むデータセットに存在する変数を定義 ;
length NAME $12 SEX $4 AGE HEIGHT WEIGHT NO 8 PRODUCT $ 8 PRICE 8 ;
_DSID = open("sashelp.class") ; *--- データセットID取得 ;
_NOBS = attrn(_DSID,"nobs") ; *--- オブザベーション数の取得 ;
call set(_DSID) ; *--- 変数のひも付けのおまじない ;
*--- classデータセットからトーマスのデータを抽出 ;
do I = 1 to _NOBS ;
rc = fetchobs(_DSID, I) ;
if NAME = "&NAME" then do ;
_NAME = NAME ;
_AGE = AGE ;
_HGT = HEIGHT ;
_WGT = WEIGHT ;
end ;
end ;
_DSID = open("_LIST") ; *--- データセットID取得(製品リストのデータ) ;
_NOBS = attrn(_DSID,"nobs") ; *--- オブザベーション数の取得 ;
call set(_DSID) ; *--- 変数のひも付けのおまじない ;
*--- トーマスの欲しい製品のパソコンのデータを抽出 ;
do J = 1 to _NOBS ;
rc=fetchobs(_DSID,J) ;
if PRODUCT = "&SHOHIN" then do ;
_NO = NO ;
_PRODUCT = PRODUCT ;
_PRICE = PRICE ;
end ;
end ;
keep _NAME _AGE _HGT _WGT _NO _PRODUCT _PRICE ;
run ;
proc print ; run ;

結果を見てみましょう。classデータセットからトーマス君の情報、_LISTデータセットからパソコンの番号と値段を取得しています。
fetchobs

まだまだ便利な使い方があるはずなので引き続き調査します。
スポンサーサイト

Posted on 2014/01/15 Wed. 01:11 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top