2007年3月14日水曜日

V9での新機能「DCREATE関数」



decrement 」ではありません。


directory create


つまり、ディレクトリ(フォルダ)を作成するSASの関数です。



ディレクトリ(フォルダ)作成を、わざわざSASでやらなくてもという気もしますが、


せっかく加わった関数なので使ってみましょう。





以下のように、D:\tempの直下に「test」というフォルダがあります。


f:id:n-insight:20070313165611g:image


この「test」というフォルダ内に、DCREATE関数 でフォルダを作成してみます。



 data _NULL_ ;


  dir1 = "テストフォルダ1" ;


  rc = dcreate (dir1, 'd:\temp\test\') ;


 run ;



構文的には、DCREATE ( 第1引数 , 第2引数 )です。



第1引数には、作成するフォルダ名の文字列(文字変数)


第2引数には、フォルダを作成する場所をフルパスで与えます。



戻り値をVIEW TABLEで見てみると、何も入っていない(ブランク)ので、左辺は適当なSAS名で構いません。



実行結果のログです。


f:id:n-insight:20070313165628g:image



フォルダを作成した旨がログに特別出力されていないのが、少し気持ち悪いですが、


「テストフォルダ1」というフォルダは、正常に作成されています。


f:id:n-insight:20070313172012g:image



ちなみに、上記のような状態(D:\temp直下に「test」フォルダしか無い場合)で



 data _NULL_ ;


  dir1 = "テストフォルダ1" ;


  rc = dcreate (dir1, 'd:\temp\testXXX\') ;


 run ;



というように、存在しないフォルダを第2引数に指定しても、


f:id:n-insight:20070313172639g:image


ログには、ERRORもWARNINGも出力されません。(もちろん、フォルダも作成されません。)


やっぱり少し気持ち悪いですね。




実用的な使用例を考えてみました。



各プロジェクトをフォルダ分けして管理する場合に、


f:id:n-insight:20070313172928g:image


のようなSASデータセットを作成しておき、



 %Macro createDir( projectName ) ;


  data _NULL_ ;


   set temp ;


   * d:\tempの直下に基準となるフォルダを作成 ;


   if _N_ = 1 then rc = dcreate ("&projectName", "d:\temp\") ;


   * 基準としたフォルダの直下に各フォルダを作成 ;


   rc = dcreate (dir, "d:\temp\&projectName") ;


  run ;


 %Mend createDir ;


 options MPRINT ;


 %createDir( Project01 ) ;



のようなマクロを実行すると、


f:id:n-insight:20070313173337g:image


のようにフォルダ構成を作ることができます。






社内にUNIX-SASが無いので試すことができませんが、


UNIXではディレクトリ権限等があるので、注意して使う必要がありそうです。





訂正:2007/03/13


DCREATE関数の戻り値を格納する変数について


「戻り値をVIEW TABLEで見てみると、何も入っていない(ブランク)ので、左辺は適当なSAS名で構いません。」


と記載しましたが、誤りでした。



お詫びとともに訂正させていただきます。




正確には、以下3パターンで戻り値が変わります。



①フォルダ(ディレクトリ)が正常に作成された場合


②作成するフォルダ(ディレクトリ)が既存の場合


③第2引数で指定したフォルダ(ディレクトリ)が存在しない場合



①では、作成されたフォルダ(ディレクトリ)のフルパスが戻り値になります。


(例 d:\temp\test\テストフォルダ1)



②③では、戻り値がブランクになります。


0 件のコメント:

コメントを投稿

ネイチャーインサイト サイトリニューアル&NIBLOGの引っ越し

ご連絡が遅くなりましたが、 ネイチャーインサイトの際とがリニューアルしました。 https://www.n-insight.co.jp/ それに伴い、NIBLOGも引っ越しすることになりました。 https://www.n-insight.co.jp/niblog/ ...