2009-07-29 3 views

答えて

2

あなたが所有するすべてのリモート作業ディレクトリに複数のlibrefを割り当てるためのマクロは次のとおりです。

 
rsubmit ; 

%MACRO DOUBLELIB(USER=&SYSUSERID,LIB=double)/des="Assign libname of double for multiple SAS sessions for the same user"; 

options nosymbolgen nomprint ; 

%LET WRK  = %SYSFUNC(pathname(work)) ; 
%LET WRKDIR = %SYSFUNC(scan(&WRK,-1,/)) ; 
%LET SASTEMP = %SYSFUNC(tranwrd(&WRK,&WRKDIR,)) ; 

filename mywork pipe "ls -ls &SASTEMP" ; 
data zwork ; 
    infile mywork lrecl=512 recfm=v pad ; 
    input @1 char $512. ; 
    if index(upcase(char),upcase("&USER")) and ^index(char,scan("&WRK",-1,'/')) and index(char,'SAS_work'); 
    path = scan(char,-1,' ') ; 
    n + 1 ; 
    call symput('PATH'||compress(n),"&SASTEMP"||strip(path)) ; 
    call symput('PATHN',compress(n)) ; 
run ; 

%NOBS(zwork) ; 
%IF &NOBS > 0 %THEN %DO ; 
    libname &LIB (
    %DO I = 1 %TO &PATHN ; 
     "&&PATH&I" 
    %END ; 
    ) access=readonly ; 
%END ; 
options symbolgen mprint ; 
%MEND DOUBLELIB; 

%DOUBLELIB(LIB=dblwork) ; 

endrsubmit ; 

/* Assign local libref to new remote dblwork libref */ 
libname rdouble slibref=dblwork server=myserver ; 
+0

クリスお礼ありがとうございました!あなたには1つを持っていない人のための別の答えで%nobsマクロを追加しました... –

+0

質問 - あなたはどのように "サーバー= myserver"ビットを変更することを避けるのですか? –

2

答えを知っている質問をする倫理がわからないのですが、うまくいけば他の人がこれを見つけるでしょう。

%macro serverpath; 
%put NOTE:; %put NOTE-; %put NOTE-; 
%put NOTE- libname OldWork "%sysfunc(pathname(RWORK))" server= remote %str(;); 
%put NOTE- rsubmit%str(;); 
%put NOTE- libname OldWork "%sysfunc(pathname(RWORK))"%str(;); 
%mend; %serverpath; 

これにより、必要なコードがログに記録されます。あなたが変更する必要があるかもしれないビットは、サーバー=オプションです - これはあなたがログオンしている環境の名前でなければなりません(プログラムでこれをどのように参照するかわかりません - 誰にも分かりません)

当然のことながら、

+0

完全に倫理的です。 SOに関連するコンテンツをSOに取り込むためのもの。 –

2

Chris Jさんへの返信 - missing macro ..

rsubmit ; 
%macro nobs(dsn); 
%local dsnid rc; 
%global nobs; 
%let nobs=.; 
%* open the data set of interest ; 
%let dsnid=%sysfunc(open(&dsn)); 
%* If the open was successful get the nobs and CLOSE &dsn ; 
%if &dsnid %then %do; 
    %let nobs=%sysfunc(attrn(&dsnid,nlobs)); 
    %let rc =%sysfunc(close(&dsnid)); 
%end; %else %do; 
    %put WARNING: Unable to open &dsn - %sysfunc(sysmsg()); 
    %let nobs=0; 
%end; %mend nobs; 
endrsubmit; 
関連する問題