1

SAS でデータセットとフォーマット カタログを受け取り、それを開こうとしていますが、フォーマット カタログが正しく適用されていません。これが私が使用したコードです。SAS のサイトを調査しましたが、カタログを呼び出すための正しい手順があると思いましたが、機能していません。私はそれが私が作っている基本的なエラーだと確信しています。

libname in 'U:/';
libname library 'U:/';

Options fmtsearch = (library.formats_raw); 

data ae;
set in.ae;
format 
    aeactae $AEMGMT.
    AEACTSM $ACTION.
    AEDVIS $VISIT.
    AEENDT DATE11.
    AEINT $AEINT.
    AEIRLOC $INJSITE.
    AEIRMEAS $YESNO.
    AEIRTERM $ISR.
    AEIRVIS $VISIT.
    AEIRYN $YESNO.
    AEOUT $OUTCOME.
    aerel $aerel.
    AESER $YESNO.
    AESTDT DATE11.
    AEYN $YESNO.
    EVTDT DATE11.
    LASTUPD EURDFDT20.;
run;

変数ごとに、ログに次のエラーが表示されます。

format
            aeactae $AEMGMT.
                     --------               
ERROR 48-59: The format $AEMGMT was not found or could not be loaded.
4

1 に答える 1

0

編集:新しい情報を考えると、答えが変わります。役に立つ場合に備えて残りを残します。

フォーマット カタログではなく、フォーマット データセットがあります。これを実行する必要があります:

proc format cntlin=in.formats_raw;
quit;

フォーマットをインポートします。もちろん、これは適切に作成されていることを前提としています-少なくとも、、、、fmtnameおよびおそらく他startlabelいくつかの変数も必要です( 、、typehlo一般end的です)。

これにより、データセットに保存された形式SASが作業環境にインポートされます。永続的なカタログを作成する場合は、ステートメントlib=inに保存したい場所に またはを指定する必要があります。proc format


古い答え:

必要のない方法でいくつかのことを行っていますが、通常は正しく行っています。

librarylibname は避けるべきです。フォーマットを適切に使用する方法を知らない人が使用するものですが、フォーマット検索で特別な優先順位が付けられ、複数ある場合に問題が発生する可能性があるため、実際には良い考えではありません。LIBRARYおよびWORKfmtsearch リストに自動的に追加され、明示的にリストされていない限り最優先されます。しかし、フォーマットカタログがformats.sas7bcatとにかくそうでない場合、それは実際には役に立ちません。

あなたの場合、一度定義するだけで(in)、次のようにする必要があります。

libname in 'U:/';
Options fmtsearch = (in.formats_raw work);

workフォーマットカタログが優先されるようにするためにそこに入れます。

formats_raw.sas7bcatそのフォルダにファイルがある場合は、動作するはずです。そうでない場合は、何か他のことが起こっている可能性があります (たとえば、インポートすることを意図したファイルがある可能性があります) cntlin.sas7bdat

これは、この作業の簡単な例です。

libname temp 'c:\temp';
proc format lib=temp.formats_raw;
  value YNF
  1='Yes'
  2='No'
  ;
quit;

options fmtsearch=(temp.formats_raw work);

data test;
  x=1;
  format x YNF.;
  put x= ynf.;
run;

fmtsearchを to に変更する(temp work)と、失敗することがわかります (temp\formats.sas7bcat存在しないため)。

于 2017-03-16T14:22:21.250 に答える