是否曾经遇到过 SAS 会话问题,但由于远程工作库 (RWORK) 中有关键文件而无法关闭会话?
我当然有!那么如何从另一个(新)会话访问该库?
不确定提出您知道答案的问题的道德规范,但希望其他人会发现这很有用!
%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;
这会将您需要的代码放入日志中。您可能需要更改的部分是 server= 选项 - 这应该是您登录的环境的名称(不确定如何以编程方式引用它 - 其他人知道吗?)
显然,原始会话需要保持打开状态(以防止 RWORK 被擦除),并且第二个会话需要登录到同一台服务器上......
这是我编写的一个宏,用于将多个 libref 分配给您拥有的所有远程工作目录:
提交;
%MACRO DOUBLELIB(USER=&SYSUSERID,LIB=double) / des="为同一用户的多个 SAS 会话分配 double 的 libname";
选项 nosymbolgen nomprint ;
%LET WRK = %SYSFUNC(路径名(工作));
%LET WRKDIR = %SYSFUNC(scan(&WRK,-1,/)) ;
%LET SASTEMP = %SYSFUNC(tranwrd(&WRK,&WRKDIR,)) ;
文件名 mywork 管道 "ls -ls &SASTEMP" ;
数据zwork;
infile mywork lrecl=512 recfm=v pad ;
输入@1 个字符 $512。;
if index(upcase(char),upcase("&USER")) and ^index(char,scan("&WRK",-1,'/')) and index(char,'SAS_work');
路径=扫描(字符,-1,'');
n + 1 ;
调用 symput('PATH'||compress(n),"&SASTEMP"||strip(path)) ;
调用 symput('PATHN',compress(n)) ;
跑 ;
%NOBS(zwork) ;
%IF &NOBS > 0 %THEN %DO ;
库名 &LIB (
%DO I = 1 %TO &PATHN ;
“&&路径&我”
%结尾 ;
) 访问=只读;
%结尾 ;
选项 symbolgen mprint ;
%修补双重标准;
%DOUBLELIB(LIB=dblwork) ;
结束提交;
/* 将本地 libref 分配给新的远程 dblwork libref */
libname rdouble slibref=dblwork server=myserver ;
回应 Chris J 的回应 - 缺少宏..
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;