2009-07-29 9 views

Antwort

2

hier ein Makro ich von Ihnen gehört ein mehrere libref an alle entfernten Arbeitsverzeichnisse zuweisen schrieb:

 
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

Danke Chris - hat perfekt funktioniert! habe ein% nobs Makro in einer separaten Antwort für diejenigen hinzugefügt, die keine ... –

+0

Frage - wie vermeiden Sie, das "server = myserver" Bit zu ändern ??? –

2

nicht sicher über die Ethik der Frage eine Frage, die Sie kennen die Antwort zu, aber hoffentlich finden andere dies nützlich!

%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; 

Dies wird den Code, den Sie benötigen, in das Protokoll eingeben. Das Bit, das Sie möglicherweise ändern müssen, ist die Option server = Dies sollte der Name der Umgebung sein, an der Sie sich angemeldet haben (nicht sicher, wie dies programmgesteuert referenziert wird - weiß es sonst noch jemand?)

Offensichtlich muss die ursprüngliche Sitzung offen bleiben (zu verhindern RWORK von abgewischt werden) und die zweite Sitzung muss auf dem gleichen Server angemeldet sein ...

+0

Völlig ethisch. Alles, um SAS-bezogenen Inhalt in SO einzutragen. –

2

Antwort auf die Antwort von Chris J - fehlende Makro ..

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;