如果我们proc setinit
在 SAS 中运行,我们可以获得站点名称和站点编号。
可以使用 轻松提取站点编号&syssite
。除了重定向和解析日志输出之外,有没有办法以编程方式获取站点名称?
我检查了_automatic_
变量、sashelp
数据集和proc registry
输出,但无济于事。
如果我们proc setinit
在 SAS 中运行,我们可以获得站点名称和站点编号。
可以使用 轻松提取站点编号&syssite
。除了重定向和解析日志输出之外,有没有办法以编程方式获取站点名称?
我检查了_automatic_
变量、sashelp
数据集和proc registry
输出,但无济于事。
这对我有用,并且不涉及设置元数据服务器:
PROC IMPORT OUT= WORK.temp
DATAFILE= "D:\Program Files\SASHome\SASFoundation\9.4\core\sasinst\setinit.sss"
DBMS=DLM REPLACE;
DELIMITER='3D'x;
GETNAMES=NO;
DATAROW=1;
RUN;
proc sql noprint;
select var2 into: name
from temp
where var1 = 'SITEINFO NAME';
quit;
%put &name;
这是从PROC SETINIT
.
filename out temp;
proc printto log=out; run;
proc setinit; run;
proc printto log=log; run;
data sitename;
infile out;
input @'Site name:' @;
length sitename $200;
sitename=scan(_infile_,2,"'");
put sitename=;
output;
stop;
run;
我猜你在 UNIX 环境中使用 SAS,因为你写的路径,那么这个文档会有所帮助。
!SASROOT 目录的内容 - SAS® 9.4 Companion for UNIX Environments, Sixth Edition
然后@SCR 的答案就派上用场了。正如文件所说
!SASROOT 目录包含使用 SAS 9.4 所需的文件。
和
如果您的系统上安装了所有可用的 SAS 产品,!SASROOT 目录包含下表中列出的文件和目录:
该链接的表中列出了一个名为“setinit.sas”的文件。
顺便说一句,我在我的 Windows 机器上尝试了 @SCR 的答案,它有效。还请注意路径是"%sysget(SASROOT)\core\sasinst\setinit.sss"
.
在 Chris Blake 和 FriedEgg 的指导下,我最终得到了这个解决方案:
data _null_;
length StoredText $2000 sitename $200;
rc=metadata_getattr("omsobj:TextStore?@Name='Setinit text'"
, "StoredText", StoredText);
storedtext=subpad(storedtext,index(storedtext,'SITEINFO NAME=')+15);
sitename=substr(storedtext,1,index(storedtext,"'")-1);
put sitename=;
run;