1

proc sql ビューでは、次の構文に従って一時ライブラリ定義を利用できます。

libname viewlib 'SAS-data-library'; 

proc sql;
   create view viewlib.emp_view as
      select * 
         from mydblib.employees
         using libname mydblib oracle user=smith password=secret 
            path='myoraclepath';
quit;

このアプローチの有用な利点は、SAS/Access クレデンシャル (パスワードなど) を隠したままにしておくことができ、既存のライブラリ定義と競合しないことです (たとえば、ユーザーが既に 'mydblib' ライブラリ参照名を持っている場合、これは置き換えられません)。その定義)。

ただし、自動 SQL パススルーを制限しようとしたり、テキスト ファイルでビューを作成したりする場合など、SQL ビューが適切でない特定の基準があります。

私の質問は、上記の SQL ビューの例のような一時ライブラリ参照名を使用して、データ ステップ ビューを作成する最良の方法は何ですか? ライブラリ参照名は、既存のライブラリ参照名と競合してはならず、ユーザー セッションに保持されてはならず、パスワードなどが表示されることを許可してはなりません。

4

2 に答える 2

1

だから - それは可能です。最後にそこに着きました!

%let templib=SomeLib4;
data myview /view=myview;
attrib   var1  format=$32767. informat=$32767. label='blah'
   var2  format=$32767. informat=$32767. label='blah'
   var3  format=$32767. informat=$32767. label='blah';
call missing(of _all_); /* avoid initialisation log messages */
if libref("&templib")=0 then do;
    put "WARNING: Library &templib already exists, terminating..";
    stop; /* do not replace an existing libref */
end;
else __rc=libname("&templib",,'MYSQL',  
    "SERVER='blah.com'  MYSQL_PORT=3306  DATABASE=blah  
    USER='blah'  PASSWORD='xxx' "); /* Declare temporary libref */
__DSID=OPEN("&templib..MY_Dataset",'IS'); /* OPEN the data set */ 
CALL SET(__DSID); /* use CALL SET to get variable values */ 
__rc=FETCH(__DSID); /* FETCH the first observation */ 
DO WHILE (__rc=0); /* while the last FETCH retrieved an obs */ 
    OUTPUT; /* OUTPUT an observation */ 
    __rc=FETCH(__DSID); /* FETCH the next observation */ 
END; 
__rc=CLOSE(__DSID); /* CLOSE the data set */ 
__rc=libname("&templib"); /* CLOSE the temporary libref */
stop;
drop __rc __DSID ;
run;
于 2013-06-11T08:50:05.720 に答える
1

探しているものがあれば、パスでファイルを直接参照できます。これがSAS以外のデータセットで機能するかどうかわからないため、これが特定の例に役立つかどうかはわかりませんが、これは合理的な答えであるため、Google社員にこの答えを与えることはおそらく良い考えですあなたのタイトルの質問。

例えば:

libname ctest 'c:\temp';

data ctest.myview/view=ctest.myview;
set 'c:\AnotherLocation\class';
run;

サンプルデータ:

data 'c:\AnotherLocation\class';
set sashelp.class;
run;

ただし、これはリレーショナル データベースでは機能しません。

テキスト ファイルに関しては、これは機能しませんが、infile からビューを作成できます。「c:\temp\dummy.txt」が存在し、テキストが含まれていると仮定します。

data testvw/view=testvw;
infile "c:\temp\dummy.txt" lrecl=50 pad truncover;
input 
@1 str $50.;
run;

実行し、検査します。次に、数行のテキストを追加します。その後、ビューを再度開きます - ビューが更新されます。

于 2013-06-10T13:37:39.060 に答える